• 用开源Look&Feel (Substance)写 漂亮的Swing应用程序


     今天用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?


    大家可能会问了,什么叫着完整的使用Look&Feel?这里先不急着说明,先让大家看一副截图;



    大家看看上面幅图是否已经用了Look&Feel?  答案是正确的,但是并不完整,因为他的标题栏还没有改变,完整的使用Look&Feel后的截图如下:



    是不是觉得很不一样了呢?对于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);

    如果想要让JDialog也改变的话,还要再加上: JDilog.setDefaultLookAndFeelDecorated(true);

    下面是最终完成的界面,使用的是Substance中 OfficeBlue2007LookAndFeel



    第二个问题,如何给应用程序添加水印或者说是背景?

    官方的文档说的很少,也没有具体的使用例子说明,后来下载了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);
            }


    上面的代码中有一句代码的位置是不能变的,那就是 SubstanceLookAndFeel.setSkin(skin); 。
    它必须要在 UIManager.setLookAndFeel(new SubstanceOfficeBlue2007LookAndFeel()); 这句的下面。
    否则你看不到水印的效果。下图是有水印和没水印的对比图(左边的是有水印的,右边的是没水印的):



    再贴一张官方的一张截图:大家看看Swing写的 Office2007 界面如何?

    转:http://www.blogjava.net/gml520/archive/2009/05/23/277603.html

  • 相关阅读:
    gcc编译时头文件和库文件搜索路径
    vim 使用
    stdlib.h stdio.h
    sys/types.h fcntl.h unistd.h sys/stat.h
    gcc 使用
    grep 正则表达式
    firefox
    CentOS7 屏幕亮度的命令行管理
    linuxqq
    rpm 与 yum 源
  • 原文地址:https://www.cnblogs.com/langtianya/p/3768495.html
Copyright © 2020-2023  润新知