
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
今天,达内武汉IT培训机构的小编将要给大家带来的是Swing框架之UI Delegate之一。
Swing的UI Delegate机制使得Swing组件可以动态地切换LAF。注:所谓LAF就是Look and feel,外观和感觉,为了更准确表达这个意思,后文用LAF,表示Look And Feel。这套LAF机制是封装在Swing组件内部的,开发者编写Swing程序,不需要指定特定LAF。Swing工具提供了一套缺省LAF;当然Swing的LAF的API是开放的,允许开发者通过扩展已有的LAF或者从头创建一个LAF。虽然这种可插拔LAF的API是可扩展的,但是它被有意设计成基本组件下一层的接口,这样开发者不必要理解LAF机制的复杂细节就能创建Swing图形用户界面。
虽然不提倡开发者自己创建新的LAF,但Swing开发小组意识到了PLAF(Platform Look And Feel, 平台相关的外观和感觉)对于想创建独特外观的应用程序来说是一个非常强大的功能。事实证明,PLAF对于创建残障用户友好的界面是很理想的(残障用户:有视力缺陷的用户或者不能操作鼠标的用户)。
本质上说,可插拔LAF的设计意味着实现组件展现(Look)和事件处理(Feel)的部分是被代理到独立的UI对象中的,这些UI对象是由当前的LAF提供的,它们可以被动态地修改。这些可插拔LAF的API包括:
Swing组件(component)类中的钩子
LAF管理的顶层API
独立的包中实际实现LAF的接口
组件钩子
拥有有LAF特征的Swing组件在javax.swing.plaf包都有一个抽象类来代表它的UI Delegate,这些UI类的命名规则是该组件类去掉前缀J,加上后缀UI。比如JButton的UI Delegate类的名字是ButtonUI。
UI Delegate在组件的构造函数中创建,并以组件的限定JavaBean属性的形式访问,比如JScrollBar提供了下面的方法访问它的UI Delegate:
public ScrollBarUI getUI()
public void setUI(ScrollBarUI ui)
组件创建并设置UI Delegate的过程实际上是“安装”组件LAF的过程。每个组件同时提供方法创建和设置“缺省”LAF的UI Delegate,组件的构造函数在安装UI时使用该方法。
public void updateUI()
LAF实现为每个抽象UI类提供了具体子类,比如,Windows LAF定义了WindowsButtonUI, WindowsScrollBar等。当组件安装它的UI Delegate时,须有办法动态查找到当前缺省LAF的具体实现类名。该操作使用了一个hash表,它的主键是由组件的getUIClassID()方法获得,习惯是使用平台抽象类。
LAF管理
Swing定义了一个抽象类LookAndFeel来表达所有LAF实现的核心信息,比如LAF的名字、描述、是否是本地化LAF,以及一个Hash表(也称作“Defaults Table”)来存储各种各样LAF属性的缺省值,比如颜色和字体。每种LAF实现都定义一个LookAndFeel的子类,如swing.plaf.motif.MotifLookAndFeel,来为Swing提供管理LAF的必须信息。
UIManager是组件和程序访问LAF信息的API(尽量不要直接访问LookAndFeel实例)。 UIManager负责跟踪当前有哪些LookAndFeel类可用,哪些安装了,谁是缺省的。UIManager还管理对于当前LAF的Defaults Table的访问。
“缺省”LAF
UIManager还提供了设置和获取当前缺省LookAndFeel的方法:
public static LookAndFeel getLookAndFeel()
public static void setLookAndFeel(LookAndFeel newLookAndFeel)
public static void setLookAndFeel(String className)
Swing初始化了一个跨平台Java外观(以前称作“Metal”)作为缺省的LAF。然而,当Swing程序想明确设置缺省LAF时,可使用UIManager.setLookAndFeel()方法,比如下面的代码将缺省的LAF设置成CDE/Motif:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
以上就是今天的分享内容,更多知识敬请关注达内武汉IT培训机构的官网!