使用Eclipse進行SWT編程


使用Eclipse進行SWT編程

1. 為什么要使用SWT?

SWT是IBM開發一套跨平台的GUI開發框架。為什么IBM要創建另一種GUI呢?為什么他們不使用現有的Java GUI框架呢?要回答這些問題,我需要回到Java的早期時代。

Sun已經創建了一套跨平台的GUI框架 AWT (Abstract Windowing Toolkit)。 這個AWT框架使用了本地窗口組件(native widgets)不過它存在LCD問題. 這個LCD問題導致了它失去主要的平台特性。換句話說,如果平台A有窗口組件1-40而平台B有窗口組件20-25,那么這個跨平台的AWT框架只能提供這兩個集合的交集。

為了解決這個問題,Sun創建了一個新的框架使用模擬窗口組件(emulated widgets)來代替本地窗口組件(native widgets)。這個方法解決了LCD問題同時提供了豐富的窗口組件,不過也產生了其他的問題。例如,Swing應用程序不再和本地程序在樣子上一致。雖然JVM有了很大的改善, 但是Swing應用程序仍然存在它們本地配對物所沒有的性能問題。而且,Swing應用程序消耗了太多的內存,故不適合用於PDA和移動電話等小型設備。

IBM發現這些方法都無法滿足他們的需求。因此,IBM創建了新的GUI庫叫做SWT,它解決了AWT和Swing框架中的問題。SWT框架使用JNI訪問本地窗口組件(native widgets),如果一個窗口組件在主機平台上不能獲得,那么SWT會模擬這個不能獲取的窗口組件。

2. 一個SWT應用程序的基礎材料

Display, Shell和Widgets是一個SWT應用程序的基礎材料。Displays用於管理事件循環(event loops)和控制UI線程和其他線程之間的通訊。Shell是應用程序中由操作系統窗體管理器來管理的窗體。任何SWT應用程序都需要至少一個Display實例和1個或更多的Shell實例。

 

 1.不同視角看的SWT程序

1 說明了一個SWT應用程序的不同看法。第一幅圖是簡化的UI對象的繼承圖。第二幅圖是UI對象的包含結構。第三幅圖就是創建了的UI。

如果一個應用程序使用多個線程,每個線程使用自己的Display對象實例。那么你可以通過使用靜態的Display.getCurent()方法得到當前活躍的Display對象實例。

一個Shell表示一個特別操作系統中的一個窗口。一個Shell可以最大化,正常化,和最小化。有兩種類型的shell。一種是頂層(top-level)Shell作為Display的主窗口創建的,另一種是依賴於其他shell的對話shell。

Shell的類型是由傳給Shell構造函數的style位決定的。Shell的默認值是對話Shell。也就是說,如果沒有傳遞任何值給構造函數參數,那么創建的是默認的對話Shell。如果一個Display對象作為參數,那么它是頂層(top-level)Shell。

有些窗口組件(widget)的屬性必須在創建時設定。這些窗口組件(widget)屬性叫做style bitsStyle bits是在SWT類中定義的常量。如Button button = new Button( shell, <styleBits> )。當然可以通過或操作|來使用多個style bit。例如,要使用一個有邊的按鈕,你需要使用SWT.PUSH | SWT.BORDER作為style bit參數。

3. 環境設置

開發一個SWT應用程序與開發一個Swing應用程序不同。為了可以開始一個SWT應用程序的開發,你需要把SWT庫加到classpath中,同時設置好對應的必要的環境變量。

第一個需要的庫是swt.jar文件,它位於ECLIPSE_HOME/eclipse/plugins/org.eclipse.swt.win32_2.1.0/ws/win32目錄。根據你使用的Eclipse版本,你可能需要使用不同的目錄。這個swt.jar文件必須加到你的classpath中,為此到Project->Properies->JavaBuildPath->Libraries->Add Variable -> Eclipse Home ->Extend並按上述路徑選擇swt.jar庫,然后單擊OK

然后,你可以編譯SWT應用程序,但是由於拋出下邊所示的運行時異常,無法運行它,因為swt.jar使用了本地庫。你需要設置java.library.path環境變量來在Java中使用本地庫。

Console output

java.lang.UnsatisfiedLinkError: no swt-win32-2133 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1403)
at java.lang.Runtime.loadLibrary0(Runtime.java:788)
at java.lang.System.loadLibrary(System.java:832)
...
at org.eclipse.swt.widgets.Display.<init>(Display.java:287)
at Main.main(Main.java:25)
Exception in thread "main"

要設置java.library.path變量,到Run-> Run...-> Java Applicaton-> New ->Arguments -> VM Arguments。然后,如何需要,如下修改path,把它粘貼到VM Arguments部分。-Djava.library.path=c:/eclipse/plugins/org.eclipse.swt.win32_2.1.0/os/win32/x86

 

裝載本地庫

如果你需要裝載應用程序使用的任何本地庫,你可以使用Runtime.getPlatform.loadLibrary("libraryname")方法。

完成這些步驟,你就可以在你的eclipse環境下運行SWT程序了。

4. 你的第一個SWT應用程序

創建一個典型的SWT應用程序需要一下步驟:

  • 創建一個Display
  • 創建一個或多個Shells
  • 設置Shell的Layout manager
  • 創建Shell中的widgets
  • 開啟Shell窗口
  • 寫一個事件轉發循環
  • 銷毀display

你可以使用下邊的代碼模板來快速的運行本文中的代碼片斷。你可以復制粘貼這些代碼至合適的區域。如源代碼1所示:

源代碼 1. SWT應用程序模板

import org.eclipse.swt.layout.RowLayout;

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.Shell;

 

public class SliderExample

{

  public static void main(String args[])

  {

 Display display = new Display();

 Shell shell = new Shell(display);

 shell.setLayout( new RowLayout());

    // ------------------------

    // Your code comes to here.

    // ------------------------

    shell.pack();

 shell.open();

 while( !shell.isDisposed())

    {

      if(!display.readAndDispatch())

      display.sleep();

    }

 display.dispose();

  }

}

這個例子顯示了一個空的窗口。你可以加widget到上邊的模板。任何SWT應用程序需要 一個Display和一個或多個Shells。這個Shell是個合成對象;它可以容納其他的合成對象。如果沒有設置shell的 layout,加到Shell的widget是不能看見的。Shell窗口必須 打開才能顯示。 事件處理循環讀取並轉發GUI事件。如果沒有事件處理循環應用程序窗口是無法顯示的。即使通過open()方法來打開Shell窗口。讓后,需要在Shell被丟棄的時候銷毀Display。

 

 

導入需要的庫

你可以使用Source->Organize Imports菜單或者Ctrl+Shift+O來自動導入需要的庫。

5. Eclipse外運行SWT應用程序

要在不使用Eclipse的環境下運行SWT應用程序,swt.jar庫必須在classpath中,並且java.library.path環境變量必須正確設置。根據主機平台,必須有合適的本地庫存在。對於Windows平台,你可以根據如下來完成本地庫的配置:

  1. 把swt.dll放在和程序相同的文件夾下。
  2. 把swt.dll放在JAVA_HOME/bin/文件夾下。
  3. 把swt.dll放在c:/windows/system32文件夾下。

javac -classpath c:/swt/swt.jar HelloWorld.java
Java -classpath c:/swt/swt.jar;. -Djava.library.path=c:/swt HelloWorld
java.library.path是JNI必需的環境變量。如果你沒有設置這個環境變量。你的DLL 類是不能訪問的。在這種情況下,應用程序不能正常的運行,並會拋出異常。

 

SWT

Swt庫存在於Eclipse的plug-in目錄下。如果你想不下載整個Eclipse包而獲得SWT庫,你可以在http://www.eclipse.org/downloads目錄下單獨下載這個SWT庫。

6. SWT包(Packages

SWT主要由下列包組成。這些包的定義是從Eclipse的API文檔上得到的。你可以在Eclipse的網站上獲得整個API文檔。
org.eclipse.swt: 包含了定義了SWT需要使用的常量和異常的類。這個包由三個類組成:SWT, SWTException和SWTError。SWT類可能是最受歡迎的類,因為它包含了SWT庫所需要的常量如鍵盤、錯誤、顏色、布局、文本樣式、按鈕等常量。
org.eclipse.swt.widgets: 包含了大多數核心SWT窗口組件,包括支持的接口和類。
org.eclipse.swt.events: 定義了SWT組件使用的typed events, listeners和events。這個包有三組不同的類:Listener接口,Adapter類和Event類。
org.eclipse.swt.dnd: 包含了對SWT窗口組件拖放(drag-and-drop)支持的類。
org.eclipse.swt.layout: 包含了提供對SWT窗口組件自動安置和大小控制的類。
org.eclipse.swt.print: 包含了對SWT窗口組件提供打印支持的類。
org.eclipse.swt.graphics: 這個包提供了實現基本繪圖操作需要的點,長方形、區域,顏色,光標,字體,圖像上下文(GC)等的類和包含了顯示圖像代碼和載入/保存他們的公有API的圖像類。

7. 對話框

對話框的實現是本地的。也就是說,對話框像窗口組件一樣是平台組件。SWT的Dialogs是從Dialog抽象類繼承的。對話框不是窗口組件但是他可以容納窗口組件。

 

 2. Dialog類層次圖.

SWT有不同類型的對話框。有些對話框具有特殊的屬性。Dialog類可以如源代碼 2中使用

源代碼2. MessageBox例子

MessageBox messageBox =

  new MessageBox(shell, SWT.OK|SWT.CANCEL);

if (messageBox.open() == SWT.OK)

{

  System.out.println("Ok is pressed.");

}

每個對話框的open()方法返回不同的類型。例如, MessageBox對話框從open()方法返回int類型。因此,需要編寫不同的條件來處理每一個對話框的返回值。

ColorDialog顯示一個色彩選擇調色板。它從return方法返回一個RGB對象。

DirectoryDialog使你可以選擇一個目錄。它從open()方法返回一個字符串。返回值就是選擇的目錄。當然,也可以設置額外的過濾器來過濾有些目錄。

FontDialog使用戶能夠從系統所有的字體中選擇一種字體。它從open()方法返回一個FontData對象。

FileDialog使用戶能夠選擇一個文件。另外,可以設置擴展名過濾器,路徑過濾器和文件名過濾器。對話框有如表1所示的樣式:

1. SWT對話框style bit常量

SWT.OPEN

Shows Open button in the dialog

SWT.SAVE

Shows Save button in the dialog

PrintDialog使用戶在打印之前選擇打印機。它從open()方法返回一個PrinterData對象。

MessageBox用於給用戶回饋信息。你可以使用或(|)操作來聯合不同的樣式,如源代碼3所示:

源代碼3. MessageBox例子

 MessageBox messageBox =

   new MessageBox(shell,

    SWT.OK|

    SWT.CANCEL|

    SWT.ICON_WARNING);

 messageBox.setMessage("www.korayguclu.de");

 messageBox.open();

圖3就是上邊例子的運行消息框。

 

 3. MessageBox對話框

可用的按鈕常量如下所列。使或操作可以完成不同按鈕的聯合。SWT框架按照style bits創建對話框。按鈕常量有:SWT.ABORT, SWT.OK, SWT.CANCEL, SWT.RETRY, SWT.IGNORE,SWT.YES和SWT.NO。

表2 顯示了對話框可以使用的圖標。

2. SWT圖標style bit常量

SWT.ICON_ERROR

 

SWT.ICON_INFORMATION

 

SWT.ICON_QUESTION

 

SWT.ICON_WARNING

 

SWT.ICON_WORKING

 

 

8. Widgets

SWT GUI對象是從Widget和Control類繼承而來的。Widget對象是基類定義了GUI類的通用方法。Control類是所有窗口GUI類的基類也就是說從Control類繼承的組件需要一個窗口或者對話框來顯示。

Menu對象也需要一個窗口來顯示,但是這個需求間接得到了滿足。一個Menu對象需要一個Control對象。

 

4. Widget類層次圖

圖 4 顯示了Widget的類層次圖。Widget,Item,ScrollBar和Control類是抽象類。

8.1. Widget事件

Widget事件總結表3。簡化起見,表中只包含了事件名稱。我們可以很容易的使用<EventName>Event 想出事件類的名稱。同樣地,使用<Listener Name>Listener得到相關聯地Listener地名稱。並不是每一事件都有相配地Adapter類。所以,有adapter地事件用粗體表明。我們可以通過<EventName>Adaptor 來得到對應地adapter名字。
例子:
事件名稱是Control,事件類就是ControlEvent,listener類是ControlListener,adaptor 類是ControlAdaptor。

表3. SWT Events

事件名稱

窗口組件

產生的時間

Arm

MenuItem

一個菜單項加亮時

Control

Control, TableColumn, Tracker

一個控件被改變大小或者移動時

Dispose

Widget

窗口組件被銷毀時

Focus

Control

一個控件得到或者失去焦點時

Help

Control, Menu, MenuItem

用戶需要幫助時(例如按F1鍵)

Key

Control

當控件得到鍵盤焦點並且一個鍵按下或者釋放時

Menu

Menu

菜單顯示或者隱藏時

Modify

Combo, Text

窗口組件的文本被修改時

Mouse

Control

在控件范圍內鼠標被按下,釋放或者雙擊時

MouseMove

Control

鼠標越過控件

MouseTrack

Control

鼠標進入,離開或者盤旋在控件上方

Paint

Control

控件需要被重繪時

Selection

Button, Combo, CoolItem, List, MenuItem, Sash, Scale, ScrollBar, Slider, StyledText, TabFolder, Table, TableColumn, TableTree, Text, ToolItem, Tree

一個Item在控件中被選擇時

Shell

Shell

Shell被最小化,最大化,激活,鈍化或者關閉時

Traverse

Control

控件被遍歷(tabbed)時

Tree

Tree, TableTree

一個tree item被收縮或者展開時

Verify

Text, StyledText

窗口組件的文本將要被修改時

8.2. 有用的窗口組件

 

 5. Control類層次圖

所有的Control類都可以有邊框。你可以使用SWT.BORDER常量來給控件類增加邊框。

 

SWT style常量

一般都需要標明樣式常量 (style bit).如果你不知道用哪個常量或者你不想要標明它,你可以使用SWT.NULL。

8.2.1按鈕

按鈕可以具有不同的樣式。按鈕的樣式由style bit決定。表4顯示了按鈕列表和他們的樣式常量。

Table 4. SWT按鈕style bit常量和例子

常量

例子

描述

SWT.ARROW

 

一個按鈕用於顯示彈出對話框。箭頭的方向由alignment常量決定。

SWT.CHECK

 

選擇框,可以是圖像。

SWT.PUSH

 

一個按鈕

SWT.RADIO

 

在group中可以使用的單選按鈕

SWT.TOGGLE

 

同SWT.PUSH類似, 但是它可以保持按下狀態直到第二次單擊。

 

8.2.2滑塊(Slider標尺(Scale)和進度條(ProgressBar)窗口組件

標尺(Scale)表示一段可選擇的連續值。范圍可以用Scale類的setMinimum() 和setMaximum()方法設定。並可以使用getSelection()方法得到所選擇的值。標尺在一次只有一個選擇的值。也就是說,沒有多選的可能。

 

 6. 包含在一起的滑塊和標尺

根據傳遞給構造函數的參數值的不同,我們可以創建不同的滑塊和標尺。滑塊和標尺常量如表5所示:

表 5. SWT滑塊和標尺的樣式常量

SWT.HORIZONTAL
SWT.VERTICAL

顯示水平或者垂直組件

隨意地,你可以使用SWT.BORDER常量來在標尺周圍創建邊框。這個常量對滑塊沒有作用。

 Source 4. Slider widget example

 final Slider slider =   new Slider(shell,SWT.VERTICAL);

 slider.setMinimum(0);

 slider.setMaximum(100);

 slider.setIncrement(5);

 slider.setPageIncrement(10);

 slider.setSelection(25);

 slider.addSelectionListener(

  new SelectionAdapter()

  {

    public void widgetSelected(SelectionEvent e)

    {

      System.out.println("Selection:"+ slider.getSelection());

    }

  }

 );

進度條組件類似於滑塊和標尺組件,但是它不能被選擇。它用於顯示一個任務的進度。你可以對進度條組件使用SWT.SMOOTH and SWT.INTERMINATE常量。

8.2.3文本窗口組件

一個文本窗口組件可以用於顯示或者編輯文本。另外,你可以使用StyledText窗口組件來用不同的字體和顏色顯示文本。StyledText窗口組件允許設置前景、背景色和指定范圍文本塊的字體。

 

 7. Text窗口組件

我們可以使用6所列的常量來創建Text窗口組件。因此,SWT.H_SCROLL和SWT.V_SCROLL常量可用於對Text窗口組件增加滾動條。

表 6. SWT Text style bit常量

SWT.MULTI
SWT.SINGLE

顯示單行還是多行窗口組件

SWT.READ_ONLY

創建只讀的組件

SWT.WRAP

文本自動換行

源代碼 5是一個簡單的使用Text組件的例子.

Source 5. Text widget example

 Text text =

   new Text(shell, SWT.MULTI|SWT.WRAP);

8.2.4列表(List)窗口組件

List窗口組件可用於顯示可選擇的字符串列表。在選擇的情況下,List對象會發送事件通告給它的listeners。這種類型的選擇可以是單選,也可以是多選。選擇的類型是由SWT.SINGLE和SWT.MULTI常量決定的。List窗口組件是可滾動的組件。因此SWT.H_SCROLL和SWT.V_SCROLL常量可用於給Text窗口組件增加滾動條。

 

 8. List 窗口組件

下邊的代碼片斷顯示了一個簡單的List窗口組件。

Source 6List example

 final List list = new List(shell,SWT.MULTI);

 for (int i = 1; i < 11; i++)

 {

   list.add(i+".)www.korayguclu.de");

 }

 list.addSelectionListener(

   new SelectionAdapter()

   {

     public void widgetSelected(SelectionEvent e)

     {

       List list = (List) e.getSource();

       String[] str = list.getSelection();

       for (int i = 0; i < str.length; i++)

       {

         System.out.println("Selection: "+str[i]);

       }

     }

  }

 );

8.2.5窗框組件

窗框組件可用於在可改變的區域里顯示組合窗口組件。下圖就是一個窗框組件例子。

 

 9. 窗框組件

下邊是一個基本的窗框組件例子:

Source 7. Sash example

 Button button = new Button(shell,SWT.PUSH);

 Sash sash = new Sash(shell, SWT.VERTICAL);

 Button button1 = new Button(shell,SWT.PUSH);

 

8.3. 組合窗口組件Composite Widgets

組合窗口組件可以容納其他的組合窗口組件。Composite類是組合窗口組件的父類。

 

 10. Composite可以容納其他的組合類

組合類可以容納其他的組合類。這種容納關系是用一個組合窗口組件類的構造函數來建造的。與Swing相比,SWT沒有add() 方法;作為代替,你必須使用構造函數來建立包容關系結構。

正如圖10中所看到的,Shell類也是一個組合類。也就是說,Shell對象,可以容納其他的組合類。

組合類是可以卷起的,也就是說可以使用SWT.H_SCROLL和SWT.V_SCROLL常量給組合窗口組件加上滾動條。

8.3.1. Table窗口組件

Table窗口組件可以顯示一批字符串項或者圖片。與其他的組合窗口組件相比,不能給table窗口組件增加組合控件。Table窗口組件的子構件必須是TableItem類型的。

 

 11. Table窗口組件

表7中的常量可以用於table窗口組件

 7. SWT Table style bit常量

SWT.MULTI
SWT.SINGLE

使能夠進行單一或者多項選擇

SWT.FULL_SELECTION

使能夠進行行全選

SWT.CHECK

在每一行的開始顯示一個選擇框

源代碼 8 中的代碼片斷表明了含有兩列的table組件的使用方法

源代碼 8. Table窗口組件例子

  final Table table =

    new Table(shell,SWT.SINGLE);

  TableColumn col1  =

    new TableColumn(table,SWT.LEFT);

  col1.setText("Coloumn 1");

  col1.setWidth(80);

  TableColumn col2  =

    new TableColumn(table,SWT.LEFT);

  col2.setText("Coloumn 2");

  col2.setWidth(80);

 

  TableItem item1 = new TableItem(table,0);

  item1.setText(new String[]{"a","b"});

  TableItem item2 = new TableItem(table,0);

  item2.setText(new String[]{"a","b"});

 

  table.setHeaderVisible(true);

  table.setLinesVisible(true);

8.3.2. Combo(組合框)窗口組件

Combo窗口組件允許用戶從值列表中選擇一個值或者隨意輸入一個新值。組合框(combo)類似於列表組件,卻使用了有限的空間。

雖然組合框是組合性質的,但是對它增加子元素是沒有意義的。它的元素必須是String類型。一元素可以使用Combo類中定義的add(String element)方法來添加到組合框中。

     

 12. 不同樣式的組合框

下邊的SWT常量可以用於Combo窗口組件:

Table 8. SWT Combo style bit constants

SWT.DROP_DOWN

下拉式組合框

SWT.READ_ONLY

只讀組合框

SWT.SIMPLE

簡單的組合框(非下拉式組合框)。如圖11所示

下邊的例子說明了Combo組件的使用:

Source 9. Combo example

 final Combo combo =

   new Combo(shell,SWT.DROP_DOWN);

 for (int i = 1; i < 11; i++)

 {

   combo.add(i+".) element ");

 }

 combo.setText("Text");

 combo.addSelectionListener(

  new SelectionAdapter()

  {

    public void widgetSelected(SelectionEvent e)

    {

      System.out.println("Selection:"+

                         combo.getText());

    }

  }

 );

8.3.3. Tree窗口組件

Tree窗口組件描繪了樹中項的可選擇層次結構。雖然Tree類是組合的,但是不能對它增加組合類對象。Tree類的子項必須是ThreeItem類型。

     

 13. 不同樣式的Tree窗口組件

下表是Tree組件常量的列表。

表 9. SWT Tree style bit 常量

SWT.SINGLE
SWT.MULTI

允許單選或者多選

SWT.CHECK

在每個節點的開始顯示一個選擇框。

下邊是一個簡單的Tree組件例子。

源代碼 10. Tree例子

 final Tree tree =

   new Tree(shell,SWT.SINGLE);

 for (int i = 1; i < 11; i++)

 {

   final TreeItem item1  =

    new TreeItem(tree,SWT.NULL);

   item1.setText("node "+i);

   for (int j = 1; j < 6; j++)

   {

     final TreeItem item11 =

      new TreeItem(item1,SWT.NULL);

     item11.setText("node "+i+"."+j);

   }

 }

 

 tree.addSelectionListener(

  new SelectionAdapter()

  {

   public void widgetSelected(SelectionEvent e)

   {

     System.out.println("Selection:"+

                   tree.getSelection()[0]);

   }

  }

 );

 

8.3.4. TabFolder

TabFolder組件允許用戶從一些頁面中選擇一頁。雖然它是組合的,但是它不能增加其他的組合窗口組件。加到TabFolder的組件必須是TabItem類型。Tab的內容可以使用TabItem的setControl(Control control) 方法來設置。

 

 14. TabFolder窗口組件

一個簡單的TabFolder例子:

源代碼 11. TabFolder例子

 final TabFolder tabFolder =

   new TabFolder( shell, SWT.BORDER);

 for (int i=1; i<5; i++)

 {

   // create a TabItem

   TabItem item =

     new TabItem( tabFolder, SWT.NULL);

   item.setText( "TabItem " + i);

   // create a control

   Label label  =

     new Label( tabFolder, SWT.BORDER);

   label.setText( "Page " + i);

   // add a control to the TabItem

   item.setControl( label );

 }

8.3.5. CoolBar窗口組件

CoolBar窗口組件提供了一個可以在動態擺放空間上增加項的區域。你可以增加一個或多個ToolBar組件到CoolBar上。一個CoolBar可一容納一個或多個CoolItems。雖然是一個組合窗口組件,但是不能把其他組合類加到它上。CoolBar的子元素必須是CoolItem類型。

 

 15. Coolbar窗口組件

CoolBar窗口組件使用的例子:

Source 12. CoolBar example

  CoolBar coolBar =

    new CoolBar(shell, SWT.BORDER);

  coolBar.setLayoutData(

    new FillLayout());

  // create a tool bar which it

  // the control of the coolItem

  for (int k = 1; k <3; k++)

  { 

    ToolBar toolBar =

      new ToolBar(coolBar, SWT.FLAT);

    for (int i = 1; i < 5; i++)

    {

      ToolItem item =

        new ToolItem(toolBar, SWT.NULL);

      item.setText("B"+k+"."+i);

    }

    // Add a coolItem to a coolBar

    CoolItem coolItem =

      new CoolItem(coolBar, SWT.NULL);

    // set the control of the coolItem

    coolItem.setControl(toolBar);

    // You have to specify the size

    Point size =

      toolBar.computeSize( SWT.DEFAULT,

                           SWT.DEFAULT);

    Point coolSize =

      coolItem.computeSize (size.x, size.y);

    coolItem.setSize(coolSize);

  }

8.4. 具有子項控件的概述

有些控件接受子組件作為子項。如,一個組合組件接受組合組件。有些組件只需要item(項)這樣的組件如表10所列:

 10. 有項的組件

窗口組件

描述

CoolBar

CoolItem

項是可選擇的,動態的擺放在CoolBar的區域上。

Menu

MenuItem

項是菜單下的選擇。

TabFolder

TabItem

項是TabFolder中的Tab

Table

TableItem
TableColumn

項是表中的行。

ToolBar

ToolItem

項是工具欄上的按鈕。

Tree

TreeItem

項是樹上的節點。

結論

SWT是Eclipse用戶接口的核心部分。Eclipse平台基於SWT庫。要擴展你的SWT知識,你可以下載SWT網站上的SWT例子。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM