让你的Java程序外观更酷

本文介绍了如何通过改变Swing Look and Feel (LAF)来自定义Java Swing应用程序的外观,包括使用不同风格如MotifLAF、WindowsLAF等,并详细讲解了如何使用MetalLAF进行主题化定制。

Java应用程序与其他应用程序相比常常显得非常朴素。然而,通过改变Swing Look and Feel(LAF)可以很容易地使你的Java程序生动起来。

LAF系统是Swing的强大特性之一,它使得Java应用程序能够像原生程序一样被装饰起来。。通过改变程序的外观,你能够人们对你的程序的看法。



Java的Swing库缺省使用Metal LAF,但所有版本的Swing都带有包含了Motif LAF的ui.jar。另外,Windows版本的Swing包含Windows LAF,OS X版本的则包含Mac LAF。

try {

 UIManager.setLookAndFeel("javax.swing.plaf.motif.MotifLookAndFeel");

//UIManager.setLookAndFeel("javax.swing.plaf.windows.WindowsLookAndFeel");

//UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");

//UIManager.setLookAndFeel("com.apple.mrj.swing.MacLookAndFeel");

} catch(ClassNotFoundException cnfe) {

    cnfe.printStackTrace( );

} catch(InstantiationException ie) {

    ie.printStackTrace( );

} catch(IllegalAccessException iae) {

    iae.printStackTrace( );

} catch(UnsupportedLookAndFeelException ulafe) {

    ulafe.printStackTrace( );

}

// 'frame' 是最高层的组件

SwingUtilities.updateComponentTreeUI(frame);

在try/catch块中,当UIManager被更新时,已存在的组件不会被更新。这些组件的更新要通过调用SwingUtilities的方法updateComponentTreeUI(java.awt.Component)。将最高层次的图形用户界面(GUI)组件传递给这个方法,所有的外观风格都会被更新。

Metal LAF比其他的外观更强大一些,因为它是可主题化的。改变背景颜色只是Metal LAF广泛的可主题化属性之一,UIManager可为单个特定组件或整个平台设置用户订制的主题。例如。你可以在任意LAF中像这样指定一个组件的背景颜色:

UIManager.put("Tree.background",Color.yellow);

无论如何,Metal LAF允许你像这样用一个BackgroundTheme类修改整个Swing外观的背景:

package com.generationjava.swing; importjava.awt.Color; import javax.swing.plaf.ColorUIResource; import javax.swing.plaf.metal.DefaultMetalTheme; public class BackgroundTheme extends DefaultMetalTheme { private final ColorUIResource resource; public BackgroundTheme(Color color) { this.resource = new ColorUIResource(color); } public ColorUIResource getSecondary3( ) { return this.resource; } }

BackgroundTheme类可以像下面这样使用:

import javax.swing.UnsupportedLookAndFeelException; import javax.swing.UIManager; import javax.swing.plaf.metal.MetalLookAndFeel; .... MetalLookAndFeel.setCurrentTheme(new BackgroundTheme(Color.yellow ) ); try { UIManager.setLookAndFeel( new MetalLookAndFeel( ) ); } catch(ClassNotFoundException cnfe) { cnfe.printStackTrace( ); } catch(InstantiationException ie) { ie.printStackTrace( ); } catch(IllegalAccessException iae) { iae.printStackTrace( ); } catch(UnsupportedLookAndFeelException ulafe) { ulafe.printStackTrace( ); }

注意:一旦MetalLookAndFeel被更改,要用setLookAndFeel方法重新装载它。

 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值