Swing可插入外观LookAndFeel浅析
Swing可插入外观使得组件和组件绘制相分离,这样应用程序可以在运行的时候动态改变外观而不影响程序的功能。一般来说,对每一个Swing组件,外观包都包含许多个UI类和一个 LookAndFeel的子类。那些以UI结尾的类是为Swing组件提供用户界面的,如BasicButtonUI、MetalButtonUI等,它们是实际上进行组件 绘制 的类。LookAndFeel子类提供了构建特定外观的全局信息,包括组件颜色、字体、边框等。Swing提供了一个基本外观包javax.swing.plaf.basic,它对每一个组件都实现UI类的全部功能,其他定制的外观类可以继承这些basic外观类。
任何时候,应用程序都只能选择一种外观。当一个新的组件被创建的时候,它都要装载一个相应的UI类来初始化自身的颜色、字体等外观信息,装载UI类是通过选择外观来实现的。在组件中对UI类的名称或颜色等信息进行硬编码不是个好办法,因为我们不希望组件直接和外观打交道。Swing用UIManager类来解决这个问题,UIManager类负责选择外观,同时以外观无关的方式向组件提