建立插件項目
1. 選擇主菜單“檔案→建立→項目”指令,在彈出視窗中選擇“插件開發→插件項目”,單擊“下一步”按鈕。
2. 進入下一個視窗,填入項目名myswt,單擊“下一步”按鈕。
3. 進入到下一個視窗,接受所有預設值,直接單擊“完成”按鈕。
4. 完成建立向導後,可以看到Eclipse中多了一個myswt項目,其中“插件依賴項”已經對支援SWT項目所需的jar包做好了引用。Src下的myswt包還用不到,這裡将它删除掉。
建立HelloWorld程式
在myswt建立com.michael.swt包,在此包下建立一個HelloWorld類,然後把這個類改造為一個簡單的SWT程式。
代碼内容如下:
<b>package</b> com.michael.swt;
<b>import</b> org.eclipse.swt.widgets.Display;
<b>import</b> org.eclipse.swt.widgets.Shell;
<b>public</b> <b>class</b> HelloWorld {
/**
* <b>@param</b> args
*/
<b>public</b> <b>static</b> <b>void</b> main(String[] args) {
//Display負責管理事件循環和控制UI線程和其他線程之間的通信
<b>final</b> Display display=Display.getDefault();
<b>final</b> Shell shell=<b>new</b> Shell(); //shell是程式的主視窗
shell.setSize(327,253);//設定主視窗的大小
shell.setText("HelloWorld");//設定主視窗的标題
//-------建立視窗中的其他界面元件----------
//.......
//-------END---------
shell.layout();//應用界面布局
shell.open();//打開shell主視窗
<b>while</b> (!shell.isDisposed()){//如果shell主視窗沒有關閉,則一直循環
<b>if</b>(!display.readAndDispatch()) //如果display不忙,就讓display處于休眠狀态
display.sleep();
}
display.dispose(); //釋放display資源
}
}
從代碼中可以看到SWT程式的幾個特點:
它需要一個Display對象來支撐SWT界面的顯示;
Shell是主視窗,其他所有界面元件(如按鈕、文本框等)都建立于其中。
雖然這個程式涉及Display多線程操作,但在實際SWT程式設計中卻很少關心這方面,基本是照搬同樣的代碼。
運作HelloWorld
選擇主菜單“運作→運作方式→SWT應用程式”指令來運作HelloWorld.java,運作顯示的是一個空白視窗。
HelloWorld更進一步
上面的HelloWorld程式比較簡單,現在給界面加入一個按鈕,當單擊該按鈕時能彈出一個對話框,要實作這個效果,在原HelloWorld類的省略号處加入如下代碼:
Button button = <b>new</b> Button(shell,SWT.NONE); //建立一個按鈕對象
button.setText(HelloWorld); //設定按鈕上的文字
button.setBounds(88,94,100,25); //設定按鈕在視窗中的位置和大小
//編寫按鈕被單擊時的事件代碼
button.addSelectionListener(<b>new</b> SelectionAdapter(){
<b>public</b> <b>void</b> widgetSelected(SelectionEvent e){
//彈出一個對話框,MessageDialog是JFace中的類
MessageDialog.openinformation(shell,"hello","HelloWorld");
})
代碼還需要用Ctrl+Shift+O快捷鍵加入相關類的import語句,這時候要注意Button不要導入AWT的java.awt.Button,而應該導入SWT的org.eclipse.swt.widgets.Button.以後在寫SWT程式時都要注意這個問題。代碼修改後的運作效果下圖。
完整代碼如下:
<b>import</b> org.eclipse.swt.SWT;
<b>import</b> org.eclipse.swt.events.SelectionAdapter;
<b>import</b> org.eclipse.jface.dialogs.MessageDialog;
<b>import</b> org.eclipse.swt.events.SelectionEvent;
<b>import</b> org.eclipse.swt.widgets.Button;
Button button = <b>new</b> Button(shell,SWT.NONE); //建立一個按鈕對象
button.setText("HelloWorld"); //設定按鈕上的文字
button.setBounds(88,94,100,25); //設定按鈕在視窗中的位置和大小
//編寫按鈕被單擊時的事件代碼
button.addSelectionListener(<b>new</b> SelectionAdapter(){
<b>public</b> <b>void</b> widgetSelected(SelectionEvent e){
//彈出一個對話框,MessageDialog是JFace中的類
MessageDialog.openInformation(shell,"hello","HelloWorld");
}
});
注意:
雖然Shell的類定義中沒有final字首,但我們依然不能不繼承Shell類,因為Shell的父類Decorations有一個checkSubclass()方法,繼承Shell的類都會在執行此方法時抛出異常“org.eclipse.swt.SWTException:Subclassing not allowed”。
在面向對象的設計原則中,組合優于繼承。Eclipse鼓勵遵循這一原則,是以不要輕易去繼承SWT中的界面元件(如Shell類)來實作擴充,除非是那些最初設計目的就是說為了通過繼承方式來擴充功能的類,例如對話框的Dialog類。一般來說,大部分SWT元件都不要繼承它,而大部分JFace元件可以通過繼承來擴充。
*********************************************************
本文轉自redking51CTO部落格,原文連結:http://blog.51cto.com/redking/64535,如需轉載請自行聯系原作者