Java桌面技術

          Java Desktop Technology

          常用鏈接

          統(tǒng)計

          友情連接

          最新評論

          swing專業(yè)外觀

          前3篇文章使用SWT組件實現(xiàn)了專業(yè)外觀窗口,現(xiàn)在給出一個swing實現(xiàn)版本。運行的效果如下:
                                  
          用Swing實現(xiàn)不足的地方在于頂層窗口,截至到JDK1.6發(fā)布,AWT尚未支持不規(guī)則矩形窗體和窗口半透明。有好消息稱,JDK1.7中將實現(xiàn)。本程序需要在JDK1.6下編譯,因為用了一些新增的API,如果要改成1.6以前版本實現(xiàn)也不難。但是在JRE1.6下運行,性能會明顯提高。
                           
          源代碼這里下載。

          posted on 2007-11-07 16:17 sun_java_studio@yahoo.com.cn(電玩) 閱讀(12331) 評論(23)  編輯  收藏 所屬分類: NetBeansGUI Design

          評論

          # re: swing專業(yè)外觀 2007-11-07 19:10 BeanSoft

          Well done, good work man! SWT and Swing all is GUI.  回復  更多評論   

          # re: swing專業(yè)外觀 2007-11-07 19:28 William Chen

          不錯。
          看到你說的九宮格原理,很有啟發(fā),我想能不能做一款可視化定制組件外觀的工具。也就是可視化的定制Swing皮膚的工具。首先自定義一套靈活的皮膚,這種皮膚可以根據xml配置文件來改變外觀。做一個可視化設計工具,來定制外觀,產生xml配置結果,當然也可以寫一個轉換工具,基于那個靈活的皮膚,將xml配置生成一套皮膚外觀。
          我記得jre 5、6已經有一個所謂synthlookandfeel可以根據xml配置改變外觀,但好像只能改變顏色,圖片等簡單的外觀,不能使用Java2D的一些操作比如GradientPaint、畫線、填充等進行擴充。
          使用上面那個工具應該可以很容易的實現(xiàn)這種界面,你所作的就是對JButton、JLabel等標準組件,每一個定制一個外觀。比如一個JButton,基本的JButton外觀包括按下去、抬起來、rollover、獲得焦點等幾種情況的外觀,每種外觀又可以根據九宮格原理定制按鈕邊框,使用圖片也好,使用簡單Java2D元語言也好,總之讓普通開發(fā)者,能使用這個工具可視化的定制一套皮膚出來。他所作的工作無非是做一些圖標,選擇幾種有限的規(guī)則,熟悉幾種常用的Java2D操作(使用界面選擇就行了,不需要他編程)。然后生成xml配置文件,或者直接生成各種組件ComponentUI類。
          呵呵,這樣那些網頁上、Office上、IM的界面不就很容易畫出來嗎?普通Swing開發(fā)人員也可以利用普通Swing組件做恨花哨界面。  回復  更多評論   

          # re: swing專業(yè)外觀 2007-11-07 19:54 土豬

          圖片是很好看,
          只是下載了代碼,編譯不了,
          我以前是用jdk1.5的,下載了jdk6.0安裝之后,仍然ant不了。
          也不知道為什么。  回復  更多評論   

          # re: swing專業(yè)外觀 2007-11-07 23:49 sun_java_studio@yahoo.com.cn(電玩)

          @William Chen
          synthlookandfeel我也知道,但是沒研究過。對于大多數UI來說漂亮、平庸之間只隔一層窗戶紙,就是知道不知道九宮格這種手段。九宮格技術實現(xiàn)很簡單,關鍵還要看美工的創(chuàng)意。

          說起九宮格,我最開始稱呼它“切圖”。是一位前人畫了一幅設計圖,4角4邊外加中心的內容,使我豁然開朗從此界面設計上升了一個高度,后來被派到BEA專職UI開發(fā)與美工交互時提到了這種思想,才知道有個學名叫“九宮格”。看來“九宮格”作為裝飾手段早已有之。  回復  更多評論   

          # re: swing專業(yè)外觀 2007-11-08 00:03 sun_java_studio@yahoo.com.cn(電玩)

          @William Chen
          剛接觸UI的時候容易被忽悠,尤其是對null布局管理的批評,聲稱這種布局只適合組件尺寸不改變的情況,于是乎覺得必須靈活運用布局管理器才是解決布局問題的唯一方法,GridBagLayout一直沒掌握過,SpringLayout、BoxLayout又疲于應對,后來干脆舍棄布局管理器,因為我發(fā)現(xiàn)為組件添加re-size事件同樣能達到目的,而且相當靈活。但是舍棄布局管理器付出的代價是布局完全自己控制,編碼量還是滿大的。后來學習SWT時發(fā)現(xiàn)其中一個叫FormLayout的布局管理器十分靈活(百分比+偏移量),能解決一切靜態(tài)布局問題,再后來通過研讀JDK相關源碼,了解了其布局管理器原理,底層還是調用setBounds而已,沒什么之外希奇古怪的調用,于是自己重新實現(xiàn)了FormLayout,使得awt、swing也可以有強大的FormLayout支持了。過不多久我將FormLayout拿出來與大家分享,敬請期待。  回復  更多評論   

          # re: swing專業(yè)外觀 2007-11-08 00:06 sun_java_studio@yahoo.com.cn(電玩)

          @土豬
          “下載了jdk6.0安裝之后,仍然ant不了”。不知道JDK1.6是否向IDE注冊了。  回復  更多評論   

          # re: swing專業(yè)外觀 2007-11-08 00:11 sun_java_studio@yahoo.com.cn(電玩)

          @William Chen
          陳前輩少安毋躁,待我將有關布局管理器 和 xml配置組件的帖子發(fā)表后咱們再進一步討論。如何。我對您提到的工具很感興趣。  回復  更多評論   

          # re: swing專業(yè)外觀 2007-11-08 08:48 zht

          挺漂亮的,不過感覺只是對效果的實現(xiàn)而已,而且最好是在drag的時候改變大小  回復  更多評論   

          # re: swing專業(yè)外觀 2007-11-08 09:02 sun_java_studio@yahoo.com.cn(電玩)

          @zht
          在drag的時候改變大小,可以啊,稍微修改代碼即可,不過這樣對性能有影響,這點對任何窗口系統(tǒng)都一樣。  回復  更多評論   

          # re: swing專業(yè)外觀 2007-11-08 09:14 zht

          對性能影響應該不大吧  回復  更多評論   

          # re: swing專業(yè)外觀 2007-11-08 16:19 ivin

          樓主你好,William Chen和你的文章基本都拜讀過了。非常的棒,非常佩服你們的技術。我有一個小小的要求,希望你能夠在以后發(fā)布的源代碼編碼方式能不能改成utf-8,可能很多人和我一樣,下載了源代碼不一定是在中文系統(tǒng)下運行的。gbk2312的編碼會出現(xiàn)亂碼。  回復  更多評論   

          # re: swing專業(yè)外觀 2007-11-08 18:58 sun_java_studio@yahoo.com.cn(電玩)

          @zht
          如果拖拽過程中伴隨這尺寸改變,尺寸改變會導致contentPane重畫,一般情況下窗口都會閃爍。Windows窗口這種行為是可配的。  回復  更多評論   

          # re: swing專業(yè)外觀 2007-11-08 19:05 sun_java_studio@yahoo.com.cn(電玩)

          @ivin
          “拜讀”我不敢當,本人資歷與技術和William Chen不是一層次的。對于桌面設計,漂亮是一方面,但是更重要的是做到UI與業(yè)務分離,畢竟客戶更關注的業(yè)務。編碼改成utf-8沒問題。  回復  更多評論   

          # re: swing專業(yè)外觀 2007-11-09 15:38 William Chen

          電玩,
          你每次講話總是太謙虛、太客氣了,再這樣說弄得我挺心虛的,都不敢再來露面了。其實我也只不過多學過兩年Java,一名熟練工人,一名賣油翁而已。以后別用這樣的詞,我實在承受不起。你懂很多我不懂的,我懂很多你不懂的,每個人都是自己領域的行家,大家互相學習,互相討論。知識多了讓人充實,朋友多了讓人開心。希望大家在一起就是能互相學習知識,多認識朋友,分享獲取知識的快樂。  回復  更多評論   

          # re: swing專業(yè)外觀 2007-12-20 19:33 游客

          今天在網上搜索swing lookandfeel的時候,無意中發(fā)現(xiàn)了博主和william Chen倆人的博客,看了幾篇文章,大為受益,以后要多多向兩位學習。  回復  更多評論   

          # re: swing專業(yè)外觀 2007-12-27 09:51 日月雨林

          好像有平臺的限制啊,它說需要另一個TM_Client的平臺  回復  更多評論   

          # re: swing專業(yè)外觀 2008-10-22 16:11 游客

          但是在樓主的界面上加上JTextField不可用????????怎么回事呢?????  回復  更多評論   

          # re: swing專業(yè)外觀 2008-10-23 10:17 sun_java_studio@yahoo.com.cn(電玩)

          是有這個問題,是JWindow的問題,我有時間再看看,如果窗口繼承JFrame就好了.
          這個只是個demo.  回復  更多評論   

          # re: swing專業(yè)外觀 2008-11-09 14:12 sun_java_studio@yahoo.com.cn(電玩)

          @游客
          現(xiàn)在這個問題解決了,問題依然是JWindow,改成繼承JFrame就可以了,但是要加上setUndecorated(true);使之去掉裝飾。代碼已經改寫了,并加上了你說的JTextField  回復  更多評論   

          # re: swing專業(yè)外觀 2009-06-08 19:39 atgihdgv

          netbeans 垃圾東西,總是報錯,什么NullPointer 什么的,一大堆  回復  更多評論   

          # re: swing專業(yè)外觀 2009-06-08 19:40 atgihdgv@yahooo.com.cn

          netbeans 垃圾東西,總是報錯,什么NullPointer 什么的,一大堆:
          java.lang.NullPointerException
          at org.netbeans.modules.coverage.config.Config.getProjectType(Config.java:163)
          at org.netbeans.modules.coverage.config.Config.isNbModuleProject(Config.java:188)
          at org.netbeans.modules.coverage.config.Config.isSupportedProject(Config.java:192)
          at org.netbeans.modules.coverage.ProjectMenuAction$ProjectContextAwareMenuAction$ProjectMenuItems.<init>(ProjectMenuAction.java:146)
          at org.netbeans.modules.coverage.ProjectMenuAction$ProjectContextAwareMenuAction.getPopupPresenter(ProjectMenuAction.java:126)
          at org.openide.util.Utilities.actionsToPopup(Utilities.java:2730)
          at org.openide.util.Utilities.actionsToPopup(Utilities.java:2810)
          at org.openide.explorer.view.TreeView.createPopup(TreeView.java:971)
          at org.openide.explorer.view.TreeView$PopupAdapter.showPopup(TreeView.java:1450)
          at org.openide.awt.MouseUtils$PopupMouseAdapter.maybePopup(MouseUtils.java:182)
          at org.openide.awt.MouseUtils$PopupMouseAdapter.mouseReleased(MouseUtils.java:177)
          at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:273)
          at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
          at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
          at java.awt.Component.processMouseEvent(Component.java:6216)
          at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
          at java.awt.Component.processEvent(Component.java:5981)
          at java.awt.Container.processEvent(Container.java:2041)
          at java.awt.Component.dispatchEventImpl(Component.java:4583)
          at java.awt.Container.dispatchEventImpl(Container.java:2099)
          at java.awt.Component.dispatchEvent(Component.java:4413)
          at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
          at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220)
          at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
          at java.awt.Container.dispatchEventImpl(Container.java:2085)
          at java.awt.Window.dispatchEventImpl(Window.java:2475)
          at java.awt.Component.dispatchEvent(Component.java:4413)
          [catch] at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
          at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:104)
          at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
          at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
          at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
          at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
          at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
          at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)



          每次都這樣,都不想用它了。有沒有人能幫哈我啊,先謝謝了!  回復  更多評論   

          # re: swing專業(yè)外觀 2011-11-25 17:12 lxw出山小草

          @atgihdgv@yahooo.com.cn
          你的一些插件壞了,可能是病毒導致的,重裝一下就行  回復  更多評論   

          # re: swing專業(yè)外觀[未登錄] 2014-05-21 14:11 tang

          @atgihdgv@yahooo.com.cn
          自己齪怪別人工具  回復  更多評論   

          TWaver中文社區(qū)
          主站蜘蛛池模板: 海原县| 平度市| 修武县| 太仆寺旗| 福州市| 佳木斯市| 鹤山市| 兴隆县| 沂南县| 元阳县| 收藏| 莱阳市| 靖宇县| 修水县| 黄龙县| 禄丰县| 桃园市| 治多县| 南开区| 博客| 哈密市| 旬邑县| 柳江县| 定远县| 庄河市| 沙河市| 尼木县| 古丈县| 盖州市| 贞丰县| 洛阳市| 邢台县| 新蔡县| 白城市| 当阳市| 图木舒克市| 巴林左旗| 兴仁县| 镇雄县| 嫩江县| 临沂市|