文章出處

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


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()