用開源Look&Feel (Substance)寫 漂亮的Swing應用程式-轉

來源:互聯網
上載者:User

今天用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 介面如何?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.