java杂谈之--Swing观感(look & feel)

最近在写基于 Swing 的 GUI 程序,swing 默认的界面风格说不上丑,但也确实不怎么好看。这让我想起了 Swing 的观感(look and feel)。

使用观感我们可以动态的切换界面风格,此外还有很多第三方组织或个人开发的观感,可以让我们的 swing 程序更加炫酷。

为程序动态指定观感

默认的观感是Metal,比起现在所看到的那些精美的界面,Metal观感确实不怎么好看。

可以为应用程序动态的指定观感:

try {
		//指定观感,参数为观感类名
		UIManager.setLookAndFeel ("javax.swing.plaf.nimbus.NimbusLookAndFeel"); 
		//刷新组件树,显示新指定的观感
		SwingUtilities.updateComponentTreeUI (frame);
	} catch (ClassNotFoundException | InstantiationException |
		IllegalAccessException | UnsupportedLookAndFeelException e) {
		e.printStackTrace ();
	}

需要注意的是指定观感后必须动态的刷新组件树,否则组件显示的还是默认观感。
可以通过以下方法列举已经安装的所有观感:

UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels ();
for (int i = 0; i < infos.length; i++) {
	System.out.println (infos[i]);
}

例如,在我的电脑上就有以下几种观感:

javax.swing.UIManager$LookAndFeelInfo[Metal javax.swing.plaf.metal.MetalLookAndFeel]
javax.swing.UIManager$LookAndFeelInfo[Nimbus javax.swing.plaf.nimbus.NimbusLookAndFeel]
javax.swing.UIManager$LookAndFeelInfo[CDE/Motif com.sun.java.swing.plaf.motif.MotifLookAndFeel]
javax.swing.UIManager$LookAndFeelInfo[Windows com.sun.java.swing.plaf.windows.WindowsLookAndFeel]
javax.swing.UIManager$LookAndFeelInfo[Windows Classic com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel]

在IDEA IDE上有一种可以很方便查看各种观感以及其展示效果的方法:在新建里面选择:在这里插入图片描述然后在里面拖入几个控件,鼠标右击空白处选择第一项preview,过一会就会出现一个Form Perview窗口,在这里面你可以预览任何已安装的观感:
在这里插入图片描述个人觉得Nimbus观感是这里面最好看的一个观感,而且它是矢量绘图的。

指定为系统观感

swing 是支持跨平台的,不同的系统都有自己默认的界面风格,可以为将swing 的观感指定为当前系统的界面风格,也就是系统观感,观感的设计之初就是为了让 swing 程序能动态的切换为当前系统的界面风格。

指定为当前观感为系统观感:

 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

设置默认观感

在网络上有一种说法是,java安装目录下的jre/lib目录下有一个swing.properties文件,通过修改文件中的swing.defaultlaf属性可改变默认观感,例如:

swing.defaultlaf = javax.swing.plaf.nimbus.NimbusLookAndFeel

在JDK8上是没问题的,但是在较近版本的java中,JDK不再附带JRE,在JDK的lib文件夹下也无法找到这个文件。

于是网上又有一种说法是需要自己在在上述目录下新建一个swing.properties文件,写下上面所说的属性,但这对于较新版本的JDK依旧无效。这种说法我也找到了出处,应该是Oracle官网上的《java™教程》,原话大意说是在bin目录下修改swing.properties文件(可能需要自己创建)的swing.defaultlaf属性,就可以改变默认观感。书也是基于JDK 8写的,所以这种方法对于最近版本的JDK也不适用。此外,这个教程还说了一种通过命令行来修改的方法,经测试,也不能用。

所以要找解决办法还得从最近版本的JDK文档入手,不可人云亦云。在JDK 13的文档中,UIManager类下面的一句话提醒了我:

Typically the swing.properties file is located in the conf
subdirectory of the Java installation directory.

于是在conf文件夹下新建了一个swing.properties文件,写上了如下内容:

# Swing propreties
#swing.defaultlaf = javax.swing.plaf.metal.MetalLookAndFeel
swing.defaultlaf = javax.swing.plaf.nimbus.NimbusLookAndFeel
#swing.defaultlaf = com.sun.java.swing.plaf.motif.MotifLookAndFeel
#swing.defaultlaf = com.sun.java.swing.plaf.windows.WindowsLookAndFeel
#swing.defaultlaf = com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel

想用哪个作为默认观感就去掉前面的#取消注释,在其他的前面加上#注释掉,运行一下程序,大功告成。

其他

也有一些第三方开发的观感,例如Napkin,可以使用上面介绍的方法应用到程序中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值