何以解憂?唯有Java

          其實程序員也懂得浪漫!
          posts - 90, comments - 637, trackbacks - 0, articles - 2
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
              今天用Swing 做了一個模仿QQ2009的登錄界面,用到了開源的Look&Feel (Substance),在使用的過程中遇到了一些問題,也學(xué)到了一些技巧。
          Substance (https://substance.dev.java.net)有很多的外觀可以選擇,而且都很漂亮,還提供了強(qiáng)大的API供開發(fā)者使用。Substance 現(xiàn)在已經(jīng)
          發(fā)展到5.2RC 版了,一開始我使用的是5.1版,但是在使用的過程中發(fā)現(xiàn)了一些bug,當(dāng)我使用Substance中提供的水印功能時,出現(xiàn)了許多的異常,這個bug在5.0的時候是沒有的,后來我又下載了最新的5.2RC版,這個問題在5.2版中已經(jīng)解決了。大家如果需要的話,可以點 點這里下載  。

          第一個問題:如何完整的使用Look&Feel?


          大家可能會問了,什么叫著完整的使用Look&Feel?這里先不急著說明,先讓大家看一副截圖;



          大家看看上面幅圖是否已經(jīng)用了Look&Feel?  答案是正確的,但是并不完整,因為他的標(biāo)題欄還沒有改變,完整的使用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");
              }

          或者說是我自己太菜了吧。總之我在認(rèn)真學(xué)習(xí)Swing的外觀使用之前我是不知道該如何使標(biāo)題欄也改變的。
          要改變標(biāo)題欄其實只要一句話就夠了,就是在main方法中添加這么一句:
           JFrame.setDefaultLookAndFeelDecorated(true);
          如果想要讓JDialog也改變的話,還要再加上: JDilog.setDefaultLookAndFeelDecorated(true);

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



          第二個問題,如何給應(yīng)用程序添加水印或者說是背景?

          官方的文檔說的很少,也沒有具體的使用例子說明,后來下載了Substance的源碼來看才發(fā)現(xiàn)該如何使用。

          以下就是我參考官方源碼寫的在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);  //設(shè)置皮膚
                     
                  } 
          catch (UnsupportedLookAndFeelException ex) {
                      Logger.getLogger(LoginFrame.
          class.getName()).log(Level.SEVERE, null, ex);
                  }

          上面的代碼中有一句代碼的位置是不能變的,那就是 SubstanceLookAndFeel.setSkin(skin);
          它必須要在 UIManager.setLookAndFeel(new SubstanceOfficeBlue2007LookAndFeel()); 這句的下面。
          否則你看不到水印的效果。下圖是有水印和沒水印的對比圖(左邊的是有水印的,右邊的是沒水印的):



          再貼一張官方的一張截圖:大家看看Swing寫的 Office2007 界面如何?



          評論

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-05-23 20:57 by Flyever,Zhang
          good

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-05-23 21:01 by BruceLeey
          非常好

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-05-23 23:04 by 黑蝙蝠
          真的很不錯~~~

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序[未登錄]  回復(fù)  更多評論   

          2009-05-23 23:48 by changedi
          用過,感覺好多的開源的swing ui外觀都不錯~~~~

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-05-24 01:01 by 003
          使用金典登陸窗口

          請問什么叫“金典”

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-05-24 06:46 by huliqing
          看起來確實很棒子

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-05-24 08:46 by 日月雨林@gmail.com
          @003
          不好意思,打字快了點寫程序的時候沒注意,謝謝你的提醒,應(yīng)該是“經(jīng)典” 才對。

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-05-24 12:28 by BeanSoft
          不錯啊 話說界面開發(fā) Swing 的MVC模式還是很強(qiáng)的 ExtJS 基本上都是照搬它的設(shè)計思想

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-05-24 15:29 by 樂蜂
          看起來確實很棒

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-05-24 23:07 by 無量字幕
          很不錯。。。

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-05-25 09:10 by 日月雨林@gmail.com
          @BeanSoft
          呵呵,最近很少看到BeanSoft老師在blogjava上發(fā)表文章哦。

          # 找不到皮膚  回復(fù)  更多評論   

          2009-05-25 22:23 by 梁晟
          我去網(wǎng)站下載了substance-all,打算山寨你的qq界面,可是這么找不到
          org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel
          這個類呢?
          望兄弟告知!

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-05-26 08:56 by 日月雨林@gmail.com
          @梁晟
          在包里面有啊,在src\org\jvnet\substance\skin 路徑下啊!你打算改他的源碼嗎?
          我用的是binary版的。源碼只是研究一下看看的。

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-05-26 09:13 by FEI
          @梁晟
          這個類 org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel 是在 substance.jar 包里,需要下載 substance 5.2 library (https://substance.dev.java.net/files/documents/3294/127141/substance.jar)。

          # 麻煩你幫忙  回復(fù)  更多評論   

          2009-05-26 11:29 by 梁晟
          首先,謝謝你的回復(fù)!
          能不能,把你的java版本的qq的源代碼分享一下,按照你的做了,可是
          標(biāo)題欄還是沒有隨主題改變而改變。
          我的郵箱: lshsm@163.com

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-05-26 11:39 by 日月雨林@gmail.com
          @梁晟
          在main方法里添加
          JFrame.setDefaultLookAndFeelDecorated(true);
          JDialog.setDefaultLookAndFeelDecorated(true);
          這里兩行代碼就可以了!

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-05-26 17:10 by BeanSoft
          最近太忙了... 周末都沒什么空

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-05-27 22:46 by 龍華城
          能不能給個源碼研究研究 82055185@qq.com

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-06-03 01:25 by 淡茗
          請教樓主:用Substance 4 完全正常的代碼在 5 中出錯,是什么原因呢?能詳細(xì)講解下嗎?

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-06-05 15:22 by 游客
          給你個小提示 ,你的界面里面標(biāo)簽 就是帶有qq圖片的那個把它外層的容器邊框設(shè)為0像素,這樣的話你的那個圖片右側(cè)就不會顯示出一塊空白了

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-06-05 15:38 by 日月雨林@gmail.com
          @龍華城
          你用netbeans的設(shè)計器,你也可以做到的。源碼就不發(fā)了。

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-06-05 15:40 by 日月雨林@gmail.com
          @淡茗
          substance 5.1里水印功能有bug ,我在博客里已經(jīng)說明了,你難道沒看到嗎? 用5.2 沒有問題了。

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2009-06-05 15:40 by 日月雨林@gmail.com
          @游客
          謝謝你的提醒,我回去改改!呵呵!

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2010-06-01 17:44 by GreatGhoul
          很精彩的東西呀。

          # re: 用開源Look&Feel (Substance)寫 漂亮的Swing應(yīng)用程序  回復(fù)  更多評論   

          2012-07-19 21:28 by 爭一代雄風(fēng)
          很不錯!
          主站蜘蛛池模板: 枣阳市| 阳朔县| 江永县| 平舆县| 安达市| 凤凰县| 大庆市| 苍溪县| 巴林右旗| 衢州市| 平武县| 伊吾县| 北辰区| 舒兰市| 临清市| 汉川市| 濮阳市| 东乡族自治县| 鄯善县| 闻喜县| 安国市| 铁岭市| 张家川| 景泰县| 疏勒县| 怀化市| 高唐县| 沿河| 商水县| 太谷县| 郁南县| 海阳市| 永平县| 莱州市| 会泽县| 鄂伦春自治旗| 石家庄市| 永仁县| 林芝县| 平安县| 湟源县|