快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新葡新京:给Java程序穿花衣



作者:谭志强

常常听同伙说,Java编写的法度榜样界面对照单一,不好进行个性化设置设置设备摆设摆设。现在让我们一路来懂得有关Java界面样式相关类的常识,以及若何用Java写出变幻莫测的用户界面,让Java法度榜样也拥无意偶尔髦的换肤功能。

实现道理

Java平台成熟后,设计职员与开拓职员就熟识到必要继续性好、兼容性好、轻易应用的Java法度榜样界面。这时Sun就推出了“Look and Feel”机制投合这种需求。它供给了一种独特的、与平台无关的法度榜样外不雅,以及标准的界面行径。它可以在各个平台上应用同一“Look and Feel”,从而缩短设计与开拓周期,低落软件应用职员的培训用度。这是“Look and Feel”设计的初衷。现在我们来应用这种特点为Java法度榜样穿上花衣。

要让Java法度榜样具备换肤功能,首先要求有以下JDK版本:

1.Sun JDK1.1.7B/Swing1.1.1 (Windows);

2.Sun澳门新葡新京 JDK1.2.2 (Windows、Solaris、 Linux);

3.Sun JDK 1.3 或以上版本 (Windows)。

我们先来认识“Look and Feel”几个相关的类以及API,以便来理解我们的换肤术。与“Look and Feel”亲昵相关的是LookAndFeel抽象类和UIManager类。

LookAndFeel类

LookAndFeel是一个抽象类,除了供给了一些static措施,还定义了一些抽象的个性化设置措施情由子类实现。

从JDK1.1.3开始,Sun供给了三个LookAndFeel的子类 javax.swing.plaf.metal.MetalLookAndFeel、com.s澳门新葡新京un.java.swing.plaf.motif.MotifLookAndFeel、com.sun.java.swing.plaf.windows. WindowsLookAndFeel。它们分手供给了“Metal”、“Motif”与“Windows”的界面样子容貌外形。也便是说,任何基于Swing的界面法度榜样本身都可以应用三种系统供给的皮肤。实际上我们也可以直接或间接承袭LookAndFeel类,自己编写一种“皮肤”。在这里我们要应用到一个开放源代码的产品Skin Look And Feel 1.2.2,在http://www.l2fprod.com/可以找到它的整个源代码。Skin Look And Feel本身还可以替换http://www.l2fprod.com/供给的各类“皮肤”,让你的法度榜样可以各类“皮肤”示人。

UIManager类

这个类便是Swing界面治理的核心,治理Swing的小利用法度榜样以及利用法度榜样样式的状态。UIManager类供给了下列静态措施用于替换与治理“Look and Feel”:

static void addAu澳门新葡新京xiliaryLookAndFeel(LookAndFeel laf)

//增添一个“Look And Feel”到帮助的“look and feels”列表

static LookAndFeel[] getAuxiliaryLookAndFeels()

//返回帮助的“look and feels”列表(可能为空)。

static String getCrossPlatformLookAndFeelClassName()

//返回缺省的实现了跨平台的Look and Feel??即Java Look and Feel(JLF)。

static UIManager.LookAndFeelInfo[] getInstalledLookAndFeels()

//返回了在今朝已经安装的LookAndFeel的信息。

static LookAndFeel getLookAndFeel()

//返回当前应用的Look and Feel

static String getSystemLookAndFeelClassName()

//返回与当前系统相关的本地系统Look and Feel,假如没有实现本地Look and

Feel则返回缺省的跨平台的Look and Feel。

static void installLookAndFeel(String name, String className)

//创建一个新的Look and Feel并安装到当前系统。

static void installLookAndFeel(UIManager.LookAndFeelInfo info)

//创建一个新的Look and Feel并安装到当前系统。

static boolean removeAuxiliaryLookAndFeel(LookAndFeel laf)

//从帮助的“look and feels”列表删除一个“Look And Feel”

static void setInstalledLookAndFeels(UIManager.LookAndFeelInfo[] infos)

//设置当前的已安装Look and Feel信。

static void setLookAndFeel(LookAndFeel newLookAndFeel)

//设置当前应用的LookAndFeel。

static void setLo澳门新葡新京okAndFeel(String className)

//设置当前应用的LookAndFeel。参数是类名。

源码剖析

下面的源代码可以在Skin Look And Feel 1.2.2下的源代码根目录下找到(比如我下载的zip包是skinlf-1.2.2-20020611.zip,解压后,在src目录下的Skinit.java)。

public class Skinit extends javax.swing.JApplet

{

/**

* The main program for the Skinit class

*

* @param args The command line arguments

* @exception ExceptionDescription of Exception

*/

public static void main(String[] args) throws Exception

{

if (args.length == 0) {

printUsage();

}

int mainClassNameIndex = -1;

String gtktheme = null;

String kdetheme = null;

String packtheme = null澳门新葡新京;

for (int i = 0, c = args.length; iGTK Theme Filename

" +

" -kdeKDE Theme Filename

" +

" -packTheme Pack Filename

";

System.out.println(usage);

System.exit(1);

}

}

在此法度榜样中应用了Java的反射技巧(Reflection)。大年夜家如有兴趣可以在JDK文档中懂得它,这里不作解释。此法度榜样最紧张的是在:

……

SkinLookAndFeel.setSkin(skin);

SkinLookAndFeel lnf = new SkinLookAndFeel();

UIManager.setLookAndFeel(lnf);

//这里是将当前的Look and Feel设置为自己定义的SkinLookAndFeel工具。

UIManager.addPropertyChangeListener(

new PropertyChangeListener() {

public void propertyChange(PropertyChangeEvent event) {

Object newLF = event.getNewValue();

if ((newLF instanceof SkinLookAndFeel) == false) {

try {

UIManager.setLookAndFeel(new SkinLookAndFeel());

}

catch (Exception e) {

e.printStackTrace();

}

}

}

});

// 监听属性改变事故,不容许用户变动LookAndFeel。即在用户要求改变Look and

Feel时从新将LookAndFeel设置成SkinLookAndFeel。

……

实际上这里只演示了一种皮肤,在http://www.l2fprod.com/有更多的皮肤等着你去考试测验。JBuilder是怎么弄成这样的呢?先找到JBuilder安装目录下的bin目录,打开JBuilder.config文件,mainclass改成Skinit:

……

# Start JBuilder using the main class

mainclass Skinit

……

然后将skinlf.jar与themepack.zip拷贝到JBuilder安装目录Lib目录下,进入敕令行模式,再进入到JBuilder安装目录下的bin目录,输入:

D:JBuilder7in>jbuilder-pack ..lib hemepack.zip

com.borland.jbuilder.JBuilder

注:D:JBuilder7in是我的JBuilder7安装目录。

您可能还会对下面的文章感兴趣: