成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SWT和Swing代碼的區(qū)別

開發(fā) 后端
本文介紹SWT和Swing代碼的區(qū)別,包括第一個不同點就是 SWT 的類庫結(jié)構(gòu)不像 Swing, 沒有單一的父組件. SWT 中有好幾個父類等。

筆者過去學(xué)習(xí)過Swing(也算是AWT的增強版吧), 現(xiàn)在開始學(xué)習(xí)一下 SWT, 還沒有開始深入 JFace 和 RCP, 一步步來吧. 先學(xué)好基礎(chǔ)的, 又不用著急做項目用. 本文討論的內(nèi)容僅限于我已知的 SWT和Swing 范圍, 希望能對有 Swing 經(jīng)驗的人快速了解 SWT 有所幫助.

***個不同點就是 SWT 的類庫結(jié)構(gòu)不像 Swing, 沒有單一的父組件. SWT 中有好幾個父類:
◆Widget —— 基本的 SWT GUI 組件(類似于 Java AWT 中的 Component 和 Swing 中的 JComponent)。Widget 是一個抽象類。
◆Control —— 擁有操作系統(tǒng)的對等物的窗口小部件(換句話說,在操作系統(tǒng)中具有同一身份)。Control 是一個抽象類。
◆Composite —— 包含其他控件的控件(類似于 Java AWT 中的 Container 和 Swing 中的 JPanel)。
◆Item —— 其他控件包含的窗口小部件(該控件可能不是復(fù)合控件),比如列表和表。注意,包含一些項的控件很少包含其他控件,反之亦然。Item 是一個抽象類。

SWT 的組件不能隨意繼承, 其源代碼中會標(biāo)注: IMPORTANT: This class is <em>not</em> intended to be subclassed.如果你那樣做了, 運行的時候 SWT 系統(tǒng)就會報錯, 也不能任意包含子組件. 某些組件, 例如 Tree, 只能接收 TreeItem 作為其子組件. 這樣在寫一些可重用的圖形組件的時候必須注意, Swing 中的寫法不能直接套用在 SWT 中.

Swing 的所有圖形界面類都繼承自 java.awt.Container, 這意味著所有的 Swing 組件都可以包含任意的子組件, 也可以被繼承. 這是兩個類庫的***個不同點.

第二個不同點就是 SWT 沒有利用 Java 的自帶垃圾收集功能來管理對象的銷毀,  大部分對象都必須調(diào)用 dispose() 方可完成資源的釋放.

第三個不同點就是在組件的顯示上, SWT 抽象了一個 Display 對象來處理 SWT 和操作系統(tǒng)底層組件的通信, 資源申請釋放, 事件循環(huán), 任何顯示的 SWT 組件必須有且僅有一個 Display 對象.

第四個不同點就是 Swing 的組件實現(xiàn)了 MVC 機制, 但是 SWT 沒有(目前來看)提供 MVC 機制. 也就是說絕大多數(shù) SWT 組件都是不可以更換顯示的外觀的, 我的意思是例如像皮膚這樣的機制, 例如:實現(xiàn)一個 Office 2003 外觀的橙色菜單條的顯示, SWT 是不能通過簡單的編碼來實現(xiàn)的(也許有, 但是還沒找到相關(guān)的資料).

SWT 的每個組件對象提供了 setData(Object) 這樣的方法來給組件存儲一個或者多個數(shù)據(jù)對象, Swing 中沒有類似的概念.

第五個不同點就是絕大多數(shù)的 SWT 組件創(chuàng)建的時候都必須指定父組件和風(fēng)格屬性, 也就是必須有一個 parent 對象, 也不能運行的時候動態(tài)變更父組件, 具體例如 Menu 對象里有 Decorations getParent () , 但是并無對應(yīng)的 setParent() 方法. 組件創(chuàng)建之后即自動加入父組件成為其一員, 這和 Swing 的必須通過 add() 方法來加入父組件是不一樣的. 大多數(shù)的 SWT 組件不提供無參數(shù)的構(gòu)造器, 這就意味這他們不是 JavaBean, 這點上 Swing 的絕大多數(shù)組件都是 JavaBean.

總結(jié)以上這些內(nèi)容我們可以感覺到 SWT 更像是操作系統(tǒng)本地組件的一種封裝, 而不是基于 Java OO 的概念對其進行映射, 其優(yōu)點就是數(shù)據(jù)結(jié)構(gòu)簡單.

好了, 接下來還是通過一些SWT和Swing的代碼來比較吧.***個是經(jīng)典的 Hello World

SWT 版本

  1. import org.eclipse.swt.widgets.*;  
  2.  
  3. public class SWTHelloWorld {  
  4.  
  5. public static void main(String[] args) {  
  6. Display display = new Display();  
  7. Shell shell = new Shell(display);  
  8. shell.setText("Hello World!");  
  9. shell.open();  
  10. while (!shell.isDisposed()) {  
  11. if (!display.readAndDispatch())  
  12. display.sleep();  
  13. }  
  14. display.dispose();  
  15. }  

Swing 版本

  1. import javax.swing.JFrame;  
  2.  
  3. public class SwingHelloWorld {  
  4.  
  5. public static void main(String[] args) {  
  6. JFrame frame = new JFrame();  
  7. frame.setTitle("Hello World!");  
  8. frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);  
  9. frame.setSize(400, 400);  
  10. frame.setVisible(true);  
  11. }  

SWT 的 Text 屬性在不同的組件中有不同的意思, 對于窗體來說它是標(biāo)題, 對于控件來說它是顯示的文本, Swing 中這個是分開的, 對于窗口來說是 Title 屬性, 對于控件來說是 Text 屬性. SWT 的事件循環(huán)基于顯式的 while 模式, 而 Swing 已經(jīng)在底層封裝好了事件的循環(huán)和處理. 所以這兩段代碼最明顯的不同就是 SWT 多了時間循環(huán)的部分, 即文中粗體的部分.

接著我們來看看繼承 SWT 的組件會有什么后果. 在 Swing 中繼承一個組件然后向其中添加子組件, 例如建立一個自定義的工具欄, 然后向其中加入子欄目, 并***顯示出來, 這是經(jīng)常進行的操作, 再看看 SWT 中:

  1. import org.eclipse.swt.widgets.Display;  
  2. import org.eclipse.swt.widgets.Shell;  
  3. import org.eclipse.swt.widgets.ToolItem;  
  4. import org.eclipse.swt.SWT;  
  5.  
  6. public class NewToolBar extends org.eclipse.swt.widgets.ToolBar {  
  7.  
  8. public static void main(String[] args) {  
  9. try {  
  10. Display display = Display.getDefault();  
  11. Shell shell = new Shell(display);  
  12. new NewToolBar(shell, SWT.NULL);  
  13.  
  14. shell.open();  
  15. while (!shell.isDisposed()) {  
  16. if (!display.readAndDispatch())  
  17. display.sleep();  
  18. }  
  19. } catch (Exception e) {  
  20. e.printStackTrace();  
  21. }  
  22. }  
  23.  
  24. public NewToolBar(Shell parent, int style) {  
  25. super(parent, style);  
  26. new ToolItem(this, SWT.NULL);  
  27. }  
  28.  
  29. }  

以上是SWT和Swing代碼的區(qū)別

【編輯推薦】

  1. 概述Swing大多數(shù)控件
  2. GUI程序與Swing中的線程
  3. 淺析Swing.SWT和AWT的區(qū)別
  4. AWT和Swing的區(qū)別
  5. 淺談Swing中提供了JOptionPane
責(zé)任編輯:佚名 來源: 電子工業(yè)出版社
相關(guān)推薦

2009-07-17 09:36:14

SWT和Swing的區(qū)

2009-07-14 15:12:36

SwingSWT和AWT

2009-07-15 15:15:42

比較Swing和SWT

2009-07-16 13:37:33

Swing和AWT

2009-07-10 11:07:18

Swing和SWT

2009-07-17 15:30:30

JFaceAWT和SWTSwing

2009-07-14 16:30:41

Swing與SWT

2009-07-15 10:23:51

Swing SWT集成

2009-07-14 15:01:02

AWT和Swing

2009-07-17 10:25:41

AWT和SwingSWT

2009-07-17 09:55:02

事件監(jiān)聽器SWT和SwingAWT

2009-07-17 09:44:28

Look And Fe布局管理器SWT和Swing

2009-07-15 15:35:59

Swing程序Swing性能

2009-07-17 09:07:20

2020-11-10 09:20:06

垃圾代碼優(yōu)質(zhì)代碼編輯語言

2009-07-17 10:11:55

AWT和Swing

2009-07-15 09:24:30

Swing動態(tài)刷新

2011-04-15 17:33:39

SWINGAWT

2009-07-10 14:58:13

JLabel組件JFC和Swing

2009-07-14 12:58:49

AWT和Swing
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 一区免费视频 | 91久久综合亚洲鲁鲁五月天 | 日韩欧美一区二区三区 | 亚洲精品久久久蜜桃网站 | 成人在线电影网站 | 久久久久久中文字幕 | 超碰免费在线 | 毛片一区二区三区 | 久久狠狠| 99福利视频导航 | 日韩成人免费视频 | 亚洲视频免费在线观看 | 成人精品一区二区 | 中文字幕乱码一区二区三区 | 亚洲一区二区 | 国产精品99久久久久久久久久久久 | 精品免费国产一区二区三区 | 欧美视频中文字幕 | 青青草社区 | 精品av天堂毛片久久久借种 | 99久久精品免费看国产小宝寻花 | 日韩二| 老司机午夜性大片 | 国产在线网站 | 午夜国产羞羞视频免费网站 | 中文字幕二区 | 国产一区三区在线 | 日本 欧美 三级 高清 视频 | 国产乱码精品一区二区三区中文 | 国产一区二区三区视频免费观看 | 欧美激情综合色综合啪啪五月 | 亚洲一区二区三区久久久 | 91亚洲精品久久久电影 | 久久久久久九九九九九九 | 久久国产精品99久久久久 | 午夜视频在线观看网址 | 国产精品久久av | 亚洲一区二区三区在线 | 秋霞影院一区二区 | 欧美日韩综合精品 | 亚洲在线免费观看 |