天天看點

http://blog.51cto.com/redking/66421

建立插件項目

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,如需轉載請自行聯系原作者

繼續閱讀