(swing读书笔记)Swing Look And Feel(1)

 

(swing读书笔记)Swing Look And Feel(1)

                                                               By cszhao1980

Swing出现之初,就提供一种非常前卫的功能,即PLAF——可拔插的Look And Feel,我们可以非常轻松的动态改变Swing程序的Look and Feel,哇乌,真酷。

 

JAVA的跨平台特性决定了它需要这样一种功能——它可以模拟所在平台的Look And Feel,从而使自己看起来像一个原生程序。不过,在大多数的平台上,JAVA程序都 默认使用META Look And Feel(在苹果的平台上,默认使用MAC Look And Feel)。

 

当然,我们可以轻松的改变这一点,比如下面的语句会将Look And Feel设置为Motif样式的:

UIManager.setLookAndFeel(new com.sun.java.swing.plaf.motif.MotifLookAndFeel( ));

 

遗憾的是,酷炫的功能往往都很难以理解,PLAF也是如此。

本文试图将这部分讲的尽量清楚——但只是一个High Level View,忽略了大量细节。

一.      UI delegate

首先要理解的概念是 UI Delegate。

Swing Component并不自己绘制自身,而是将这个功能委托给UI delegate来完成。每个Component都有自己的UI Delegate,如下图所示,JTree组件将绘制工作委托给了MetalTreeUI对象来完成:

Swing painting delegation

(swing读书笔记)Swing Look And Feel(1)_第1张图片

【注】:UI delegate Class往往按照这样的规则命名:

Look And Feel Name + Component Name(minus J) + UI。

 

UI delegate Class都继承自ComponentUI Class。

UI delegates对象采用静态的createUI()方法创建——这是个工厂方法,由工厂决定是为同一种Component的每个对象创建各自的UI Delegate对象,还是共享一个实例。

 

二.      LookAndFeel Class

正如前面所说,每种Component都有自己的UI Delegate class。所以,JAVA程序必须确定它每一个Component应该使用的UI Class——需要一个高层的类来确定所有种类的Component UI,这个类就是LookAndFeel Class,该类的家族如下图所示:

(swing读书笔记)Swing Look And Feel(1)_第2张图片

Swing LookAndFeel class diagram

 

令人惊奇的是,LookAndFeel Class具有很简单的定义,比如,它的属性只有如下几种:

LookAndFeel properties

Property

Data type

get

is

set

Default value

defaults

UIDefaults

·

 

 

null

description

String

·

 

 

Abstract

ID

String

·

 

 

Abstract

name

String

·

 

 

Abstract

nativeLookAndFeel(是否为Native?)

boolean

 

·

 

Abstract

supportedLookAndFeel(此平台是否支持?)

boolean

 

·

 

Abstract

supportsWindowDecorations

boolean

·

 

 

false

 

大多数的属性,仅是提供一个说明,如下表所示,常见的LookAndFeel Class的设置:

Property values for common Swing L&Fs

Look-and-feel

ID

Name

Description

MacLookAndFeel

Mac

MacOS

The MacOS L&F

MetalLookAndFeel

Metal

Metal

The Java L&F

MotifLookAndFeel

Motif

CDE/Motif

The CDE/Motif L&F

WindowsLookAndFeel

Windows

Windows

The Microsoft Windows L&F

 

那么,LookAndFeel是如何确定众多Component的UI呢,答案就在第一个属性“defaults”中。

Defaults是一个UIDefaults对象,而UIDefaults则负责完成各种Component的UI的选择。

 

【注】:LookAndFeel类的最重要的方法就是getDefaults()。

要提供自己的LookAndFeel class,就必须重载该方法中,返回自定义的UIDefaults对象。

你可能感兴趣的:((swing读书笔记)Swing Look And Feel(1))