程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Eclipse開發經典教程之常用SWT組件

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

編輯:關於JAVA

在介紹組件之前,有必要介紹一下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快捷鍵,自動引入所依賴的類
* 如果有問題可發郵件到[email protected]    * */
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”可以設置按鈕為帶邊框的單選按鈕。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved