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

SWT和Swing代碼的區別

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

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

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

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

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

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

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

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

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

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

總結以上這些內容我們可以感覺到 SWT 更像是操作系統本地組件的一種封裝, 而不是基于 Java OO 的概念對其進行映射, 其優點就是數據結構簡單.

好了, 接下來還是通過一些SWT和Swing的代碼來比較吧.***個是經典的 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 屬性在不同的組件中有不同的意思, 對于窗體來說它是標題, 對于控件來說它是顯示的文本, Swing 中這個是分開的, 對于窗口來說是 Title 屬性, 對于控件來說是 Text 屬性. SWT 的事件循環基于顯式的 while 模式, 而 Swing 已經在底層封裝好了事件的循環和處理. 所以這兩段代碼最明顯的不同就是 SWT 多了時間循環的部分, 即文中粗體的部分.

接著我們來看看繼承 SWT 的組件會有什么后果. 在 Swing 中繼承一個組件然后向其中添加子組件, 例如建立一個自定義的工具欄, 然后向其中加入子欄目, 并***顯示出來, 這是經常進行的操作, 再看看 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代碼的區別

【編輯推薦】

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

2009-07-17 09:36:14

SWT和Swing的區

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

事件監聽器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

垃圾代碼優質代碼編輯語言

2009-07-17 10:11:55

AWT和Swing

2009-07-15 09:24:30

Swing動態刷新

2011-04-15 17:33:39

SWINGAWT

2009-07-10 14:58:13

JLabel組件JFC和Swing

2009-07-15 10:14:14

JApplet和JFrSwing
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜影院在线观看视频 | 在线中文一区 | 丁香婷婷久久久综合精品国产 | 亚洲色图综合 | 日本天天色 | 国产精品伦一区二区三级视频 | 日韩国产免费 | 日韩在线视频一区 | 日韩欧美精品在线播放 | 国产精品永久免费观看 | 日本小视频网站 | 一区二区三区四区免费视频 | 国产在线观 | 亚洲欧洲色视频 | 精产国产伦理一二三区 | 久久久精品一区 | 日日操日日干 | 久久国产精品久久久久 | 美女日批免费视频 | 日本色高清| 91在线免费观看网站 | 亚洲精品一区中文字幕乱码 | 成人精品鲁一区一区二区 | 欧美视频免费在线 | 国产视频91在线 | 毛片久久久 | 国产成人免费视频网站高清观看视频 | 粉嫩粉嫩芽的虎白女18在线视频 | 日本免费视频在线观看 | 天天干精品 | 男女网站免费观看 | 国产成人网| 日韩欧美高清dvd碟片 | 国产午夜精品福利 | 日韩一级免费看 | 亚洲欧美在线视频 | 成人av观看 | 2020亚洲天堂 | 中文精品视频 | 99热精品久久 | 国外成人在线视频 |