即一个组件的界面样式是通过把一个特殊的UI代表插入这个组件来设置的。
1、界面样式结构
javax. swing包中的三个类:LookAndFeel、UIDefaults和 UIManager为Swing的界面样式提供了管理手段。
LookAndFeel是一个抽象类。它可以扩展为一个界面样式提供一个特性。LookAndFeel类提供了很多方便的 static方法,还定义了抽象方法来指定如下界面样式属性。
UIDefaults是java.util.Hashtable的一个直接扩展,它维护界面样式的缺省值。开发人员可以不直接操纵UIDefaults 实例,而通过UIManager类访问缺省值。
UManager类实现的所有方法都是静态的。
1.1 界面样式
Swing 的可插人界面样式结构允许用一个组件的缺省特性,如边框、颜色和字体等来设置另一个组件。这样,一个文本域可以设置成像一个标签——这就是关键所在。
界面样式用保存在一个UIDefaults实例(一个哈希表)中的已知名称定义一组缺省属性。
lookAndFeel类为在一个JComponent实例上安装缺省属性提供了方便的方法:
Public static vod installBorder (JCormponent,String border )
Public static vod installCoors (JComponent,String forground,String background)
Public static void installColorsAndFont ( JComponent,String forground,String background,String font)
例如,installBordler方法根据传送给它的字符串参数(一个已知名的属性)设置一个组件的边框。例如,一-个按钮的缺省边框可以这样来设置:
JButton button = new JButton ("a button”) ;
LookAndFeel. installBorder ( button."Button. border");
1.2 界面样式缺省值
所有的界面样式都维护一个包含缺省组件属性的哈希表;例如,BasicLookAndFeel为按钮边框、背景、前景颜色和图标等定义了缺省值。
界面样式的缺省值是在UIDefaults 的一个实例中维护的;但是,开发人员最好不要直接访问这些缺省值。可以用UIManager类来访问当前界面样式的缺省值。
UIDefaults 是一个维护界面样式的缺省值的哈希表,并在这些缺省值改变时产生属性变化事件。UIDefaults类还提供了方便的方法来减少对从哈希表中获取的值进行类型转换。这些值是以 Objects类型存储在哈希表中的。
1.3 UI管理器
顾名思义,UIManager类管理信息,即管理Swing 小应用程序和应用程序界面样式的状态。UIManager类为访问提供了如下信息和服务的静态方法:
- 设置Swing 小应用程序或应用程序的界面样式。
- 提供对当前界面样式的缺省值的访问。
- 提供对界面样式状态信息的访问。
- 通知界面样式的变化情况。
- 从Swing属性文件中装入Swing 属性。
1.4 UI资源
如果这些资源是UIResource的实例的话,Swing将只替换UI资源。
2、java 界面样式
Java界面样式是用代码名(Java)命名的一种Metal界面样式,是Swing小应用程序和应用程序的缺省跨平台界面样式。Java界面样式提供了两个在Swing的其他标准界面样式中没有的属性:客户属性和主题( themes)。
对某些组件来说,可以设置客户属性未影响这些组件在Java界面样式中的界面样式。使用主题可以通过定义在界面样式中通用的颜色和字体来定制Java界面样式的外观。
2.1 客户属性
JIntemalFrame. isPalette——确定用于内部窗体的边框的类型。调色板边框(当JInternal-Frame . isPalette为true时使用)比正规的内部窗体边框细。
JScrollBar. isFreeStanding——如果一个滚动条是独立的,在它的周围就有一个蚀刻的边框。如果一个滚动条不是独立的,其边框则只在该滚动条的上边和左边绘制。从图7-8中可以看到freeStanding属性的效果。
JSlider. isFilled——填充的水平滑杆用一种颜色填充滑柄左边的滑槽。垂直滑杆用颜色填充滑柄下方的滑槽。
JToolBar . isRollover——影响工具栏按钮边框的绘制方式。如果这个属性为true,则当光标进人一个按钮时绘制按钮边框,并当光标离开时擦除按钮边框。其效果与Netscape Navigator中的工具栏按钮类似。
JTree. lineStyle——影响一个树中节点之间的连线的绘制方式。
2.2 主题
Java界面样式定义主题,主题是在Java界面样式中通用的颜色和字体定义。主题是通过扩展抽象的javax.swing. plaf . metal . MetalTheme类实现的,这个类定义了getControlColor ()等返回颜色的方法和getControlTextFont())等返回字体的方法。