Eclipse開發經典教程之常用SWT組件

來源:互聯網
上載者:User

在介紹組件之前,有必要介紹一下Control類。Control類是一個抽象類別,它是所有視窗組 件(即在Windows中能獲得控制代碼的組件)的基類。

Control類的繼承關係

Control類是為繼承而設計的,所有視窗組件都繼承於Control類,1所示。

圖1 Control類的繼承關係

Control的一個執行個體代表Windows中的一個視窗組件,它中有視窗名柄屬性,但是在程式中 不能夠直接存取。

Control類的常用方法

Control類提供了視窗組件中的常用方法,所有的視窗組件都可以調用Control類的方法, 常用方法如下。

1. setBounds (int x, int y, int width, int height)

解釋:設定視窗組件的位置,參數(x,y)為視窗組件左上方頂點的相對於父視窗座標, (width,height)為視窗的寬度和高度。

樣本:button.setBounds(40, 50, 100, 30)。

2. setEnabled (boolean enabled)

解釋:設定視窗是否可用,參數enabled為true表示視窗可用,為false表示視窗禁用。

樣本:button.setEnabled(false)。

3. setVisible (boolean visible)

解釋:設定視窗是否可顯示,參數visible為true表示視窗可顯示,為false表示視窗不可 顯示。

樣本:button.setVisible(false)。

4. setToolTipText (String string)

解釋:設定滑鼠指向視窗時的提示資訊,參數string為提示資訊的內容。

樣本:button.setToolTipText("very good")。

5. setFont (Font font)

解釋:設定視窗文字的字型,參數font為字型對象。

樣本:button. setFont (font)。

6. setForeground (Color color)

解釋:設定視窗的前景色彩,參數color為顏色對象。

樣本:button. setForeground (color)。

7. setBackground (Color color)

解釋:設定視窗的背景色,參數color為顏色對象。

樣本:button. setBackground (color)。

8. setCursor (Cursor cursor)

解釋:設定視窗的游標形狀,參數cursor為游標對象。

樣本:button.setCursor(new Cursor(null,SWT.CURSOR_WAIT));

9. Control (Composite parent, int style)

解釋:視窗組件中的建構函式一般會調用Control類的建構函式,參數parent為當前構建 的視窗的父視窗,style為當前構建視窗的樣式(預設可以指定為SWT.NONE)。

樣本:Button button = new Button(shell, SWT.NONE)。

另外,Control類還實現了一些和視窗有關的方法,例如createWidget和createHandle等 ,這些方法直接和作業系統相關,有興趣的讀者可以繼續研究。

提示:並不是所有的組件調用Control的方法都有用,有些方法是為某些特殊的組件而存 在的。

常用組件

有些組件在大多數作業系統都存在,SWT直接通過JNI直接封裝了這些組件。

按鈕

Button(按鈕)是SWT組件常用的一種。在組件中添加一個按鈕很簡單,只需要指定按鈕的 父組件和相應的樣式即可,例如:“Button button = new Button(shell, SWT.PUSH)”語句 在shell組件中添加了一個普通的按鈕。

另外,添加一個按鈕一般來說會指定按鈕的位置(如果未指定布局資訊)和按鈕的顯示標籤 ,如常式1所示。

常式1 HelloWorldButton.java

/**
* 為了節省篇幅,所有的import類已經被注釋
* 讀者可以通過 ctrl+shift+o快速鍵,自動引入所依賴的類
* 如果有問題可發郵件到ganshm@gmail.com    * */
public class HelloWorldButton {
public HelloWorldButton() {
Display display = new Display();
Shell shell = new Shell(display);
// 指定父組件和按鈕樣式
Button button = new Button(shell, SWT.PUSH);
//指定按 鈕的位置
button.setBounds(40, 50, 100, 30);
//指定按鈕的顯示標籤
button.setText("Click Me");
shell.setSize(200, 200);
shell.open();
while (!shell.isDisposed()) {
if (! display.readAndDispatch()) {
display.sleep();
}
}
display.dispose ();
}
public static void main(String[] args) {
new HelloWorldButton ();
}
}

上例中展示了如何在一個視窗中添加一個按鈕,程式運行效果2所示。

圖2 按鈕組件

按鈕的樣式有很多種,在SWT中,CheckBox(複選框)和RadioBox(單選框)都是不同樣式的 按鈕。

提示:如果按鈕為複選框或單選框,可以通過“getSelection”方法判斷按鈕是否被選中 。

標籤

Lable(標籤)是SWT組件常用的組件之一。在組件中添加一個標籤很簡單,只需要指定按鈕 的父組件和相應的樣式即可,例如“Label label = new Label(shell, SWT.SEPARATOR | SWT.VERTICAL)”語句在shell組件中添加了一個標籤。

可以為SWT組件指定複合樣式,SWT將按複合樣式顯示組件,如標籤樣本,常式2所示。

常式2 HelloWorldLabel.java
public class HelloWorldLabel {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
Label label1 = new Label(shell, SWT.WRAP);
label1.setText("very good!");
new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
new Label(shell, SWT.SEPARATOR | SWT.VERTICAL);
Label label2 = new Label(shell, SWT.NONE);
label2.setText ("very good!");
shell.setSize(200, 70);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep ();
}
display.dispose();
}
}

上例視窗中添加了4個標籤,並為每個標籤設定了不同的顯示樣式,程式運行效果3所 示。

圖3 標籤組件

標籤可以作為顯示文本的組件,也可以作為分隔字元,如果作為分隔字元,標籤不顯示文字信 息。

文字框

Text組件是SWT中的文字框,在組件中添加一個文字框很簡單,只需要指定文字框的父組 件和相應的樣式即可,例如“Text t = new Text(shell, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL)”語句在shell組件中添加了一個文字框。

文字框有多種顯示樣式,如常式3所示。

常式3 HelloWorldText.java
public class HelloWorldText {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
// 添加單行文字框
new Text(shell, SWT.BORDER);
// 添加靠右對齊單行文字框
new Text(shell, SWT.RIGHT | SWT.BORDER);
// 添加以密碼形式顯示的文字框
new Text(shell, SWT.PASSWORD | SWT.BORDER);
// 添加唯讀文字框
new Text(shell, SWT.READ_ONLY | SWT.BORDER).setText("Read Only");
// 添加多行顯示文 本框
Text t = new Text(shell, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
//給文字屬性賦值
t.setText("very long sting test!very long sting test!very long sting test!"
+"very long sting test! ");
t.setLayoutData(new GridData(GridData.FILL_BOTH));
shell.setSize (200,200);
shell.open();
while (!shell.isDisposed()) {
if (! display.readAndDispatch()) {
display.sleep();
}
}
display.dispose ();
}
}

視窗中添加了5個不同樣式的文字框,並為每個文字框設定了不同的顯示樣式,程式運行 效果4所示。

圖4 文字框組件

不同類型的標籤只要指定不同的樣式即可,如上所示,文字框有靠左對齊、靠右對齊、密碼框 、唯讀文字框和多行顯示的文字框。

下拉框

Combo組件是SWT中的下拉式清單方塊,使用者可以通過“Combo combo = new Combo(shell, SWT.DROP_DOWN)”在shell組件上添加下拉式清單方塊,另外,可以通過“combo.setItems (ITEMS)”設定下拉式清單方塊的下拉式清單,其中“ITEMS”是String的數組。下拉式清單方塊有幾種 顯示樣式,代碼如常式4所示。

常式4 HelloWorldCombo.java
public class HelloWorldCombo {
//下拉式清單項
private static final String[] ITEMS = { "Alpha", "Bravo", "Charlie", "Delta",
"Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliet", "Kilo", "Lima", "Mike",
"November", "Oscar", "Papa", "Quebec", "Romeo", "Sierra", "Tango", "Uniform",
"Victor", "Whiskey", "X-Ray", "Yankee", "Zulu"
};
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout (new RowLayout());
//添加下拉按鈕樣式的下拉式清單方塊
Combo combo = new Combo (shell, SWT.DROP_DOWN);
//設定下拉式清單項
combo.setItems(ITEMS);
//添加只 讀樣式的下拉式清單方塊
Combo readOnly = new Combo(shell, SWT.DROP_DOWN | SWT.READ_ONLY);
//設定下拉式清單項
readOnly.setItems(ITEMS);
//添加無下拉 按鈕樣式的下拉式清單方塊
Combo simple = new Combo(shell, SWT.SIMPLE);
//設定下 拉清單項目
simple.setItems(ITEMS);
shell.open();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}

視窗中添加了3個不同樣式的下拉式清單方塊,並且設定了下拉式清單方塊的顯示樣式,程式運行 效果5所示。

圖5 下拉式清單方塊組件

上例中只是添加了Combo的顯示資訊,通常使用者會希望所選擇的 Item項關聯到一個對象,當選擇了某一個Item項後,可以直接從此Item項中取得所選的對象 ,然後操作這些對象。使用者可以通過Widget 類的“public void setData (String key, Object value)”和“public Object getData (String key)”方法實 現此功能。

Combo是Widget的子類,當初始化Combo時,可以通過setData方法把Item 項的字串和相應的對象關聯起來,當選擇此項時再通過getData方法把當前選擇項的對象取 出來。Widget類中通過一個對象數組儲存使用者佈建的對象的引用。

提示:Widget是所 有視窗組件的父類,組件如果支援多項資料顯示,並可以選擇這些資料都可以通過getData和 setData方法獲得組件關聯的對象。

列表

List組件是SWT中的列表框,使用者可 以通過“List single = new List(shell, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL)”在shell組件上添加列表框,還可以通過“setItems(ITEMS) ”設定下拉式清單方塊的下拉式清單,其中“ITEMS”是String的數組。列表框有 幾種顯示樣式,代碼如常式5所示。

常式5 HelloWorldList.java
public class HelloWorldList {
//清單項目
private static final String[] ITEMS = { "Alpha", "Bravo", "Charlie",
"Delta","Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliet", "Kilo",
"Lima", "Mike", "November", "Oscar", "Papa", "Quebec", "Romeo",
"Sierra", "Tango", "Uniform","Victor", "Whiskey", "X-Ray", "Yankee",
"Zulu"
};
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell (display);
shell.setLayout(new FillLayout());
//添加只能單選的列表框
List single = new List(shell, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL);
// 添加清單項目
for (int i = 0, n = ITEMS.length; i < n; i++) {
single.add (ITEMS[i]);
}
//選擇第5項
single.select(4);
//添加可多選的列表框
List multi = new List(shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
//添 加清單項目
multi.setItems(ITEMS);
//選擇第10項到第12項
multi.select(9, 11);
shell.open();
while (!shell.isDisposed()) {
if (! display.readAndDispatch()) {
display.sleep();
}
}
display.dispose ();
}
}

上例視窗中添加了兩個列表框,一個為單一選取項目清單方塊,一個為多重選擇清單方塊,程式運行效果如 圖6所示。

圖6 列表框組件

提示:挑選清單框的多項值,可以是連續或不連續的清單項目,如果選擇不連續的清單項目, 要先按住Shift鍵再通過滑鼠選擇。

組件的屬性

通過使用者建立組件時,應該指定組件的屬性,組件的屬性包括組件的風格(Style)和對齊 方式等,下面將通過Button組件的屬性進行介紹,其它組件的屬性也類似。

組件的風格

使用者可以通過“org.eclipse.swt.widgets.Button”建立一個SWT的“Button”按鈕,新 建按鈕可以指定如下不同風格的參數。

·SWT.PUSH:PUSH按鈕(普通按鈕)。

·SWT.CHECK:複選框按鈕。

·SWT.RADIO:選項按鈕。

·SWT.TOGGLE:TOGGLE按鈕(帶狀態的普通按鈕)。

·SWT.ARROW:箭頭按鈕。

·SWT.FLAT:扁平按鈕。

·SWT.BORDER:帶邊框按鈕。

其中,SWT.FLAT、SWT.BORDER和其他風格可以同時存在。按鈕風格顯示如表1所示。

組件的對齊

按鈕中的文字可以設定對齊。SWT中按鈕的對齊有3種,靠左對齊、靠右對齊和置中, 另外,當為箭頭按鈕時,可以設定箭頭向上或向下,如表2所示。

另外,使用者不但可以設定按鈕風格、對齊和狀態,還能通過setImage方法設定按鈕的 圖片。另外,可以同時組合這些風格、對齊和狀態,使按鈕符合使用者的需求,例如風格 “SWT.BORDER|SWT.RADIO”可以設定按鈕為帶邊框的選項按鈕。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.