今天用Swing 做了一个模仿QQ2009的登录界面,用到了开源的Look&Feel (Substance),在使用的过程中遇到了一些问题,也学到了一些技巧。Substance (https://substance.dev.java.net)有很多的外观可以选择,而且都很漂亮,还提供了强大的API供开发者使用。Substance 现在已经发展到5.2RC 版了,一开始我使用的是5.1版,但是在使用的过程中发现了一些bug,当我使用Substance中提供的水印功能时,出现了许多的异常,这个bug在 5.0的时候是没有的,后来我又下载了***的5.2RC版,这个问题在5.2版中已经解决了。
***个问题:如何完整的使用Look&Feel?
对于Swing 的老手来说,这个是小菜一碟,但是对于Swing新手来说就比较困难了,因为他们看到的使用look&feel的许多教程都是像这样的:
- UIManager.setLookAndFeel( new SubstanceOfficeBlue2007LookAndFeel());
或者这样:
- try {
- UIManager.setLookAndFeel( " org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel " );
- }
- catch (Exception e) {
- System.out.println( " Substance Raven Graphite failed to initialize " );
- }
或者说是我自己太菜了吧。总之我在认真学习Swing的外观使用之前我是不知道该如何使标题栏也改变的。
要改变标题栏其实只要一句话就够了,就是在main方法中添加这么一句:
- JFrame.setDefaultLookAndFeelDecorated( true );
第二个问题,如何给应用程序添加水印或者说是背景?
官方的文档说的很少,也没有具体的使用例子说明,后来下载了Substance的源码来看才发现该如何使用。
以下就是我参考官方源码写的在main方法中的一段核心代码
- JFrame.setDefaultLookAndFeelDecorated(true);
- JDialog.setDefaultLookAndFeelDecorated(true);
- try {
- SubstanceImageWatermark watermark = new SubstanceImageWatermark
(LoginFrame. class .getResourceAsStream( " /demo/001.jpg " ));- watermark.setKind(ImageWatermarkKind.SCREEN_CENTER_SCALE);
- SubstanceSkin skin = new OfficeBlue2007Skin().withWatermark(watermark);
- //初始化有水印的皮肤
- UIManager.setLookAndFeel( new SubstanceOfficeBlue2007LookAndFeel());
- SubstanceLookAndFeel.setSkin(skin); //设置皮肤
- }
- catch (UnsupportedLookAndFeelException ex) {
- Logger.getLogger(LoginFrame. class .getName()).log(Level.SEVERE, null , ex);
- }
【编辑推荐】