<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 23, comments - 0, trackbacks - 0, articles - 3
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    swt學習小結

    Posted on 2008-08-18 17:04 beauty9235 閱讀(301) 評論(0)  編輯  收藏

    作者: beauty9235  鏈接:http://beauty9235.javaeye.com/blog/229625  發表時間: 2008年08月04日

    聲明:本文系JavaEye網站發布的原創博客文章,未經作者書面許可,嚴禁任何網站轉載本文,否則必將追究法律責任!

    swt學習小結
    Widget —— 基本的 SWT GUI 組件
    Control —— 擁有操作系統的對等物的窗口小部件
    Composite —— 包含其他控件的控件
    Item —— 其他控件包含的窗口小部件(該控件可能不是復合控件),比如列表和表

    標準的SWT布局類
    FillLayout:在容器中以相同的大小單行或單列的排列組件
    RowLayout:以單行或多行的方式使用幾個選項(fill,wrap,spacing,justify,type)定制組件的排列方式
    GridLayout:類似于swing的GridLayout的方式以格子的方式排列組件
    FormLayout(SWT 2.0的新特性):通過定義組件四個邊的“粘貼”位置來排列組件,被引用的相對的組件可以父組件,也可以是同一容器中的其它組件。

    /*
     * 參考文章
     * http://www.eclipse.org/articles/article.php?file=Article-Understanding-Layouts/index.html
     * http://www.ibm.com/developerworks/cn/linux/opensource/os-ecgui1/index.html
     * http://www.ibm.com/developerworks/cn/linux/opensource/os-ecgui2/index.html
     * http://www.ibm.com/developerworks/cn/linux/opensource/os-ecgui3/index.html
     * http://www-128.ibm.com/developerworks/cn/opensource/os-swingswt/
     * http://www.tkk7.com/fortune/archive/2006/03/09/34463.html
     */ 
     
     布局實施
    1.首先定義窗口和它的空白邊
    Display.getDefault().dispose();  //移去平臺核心啟動畫面
            display = new Display();
            shell = new Shell(display, SWT.TITLE);
            FormLayout layout = new FormLayout();
            layout.marginHeight = 10;
            layout.marginWidth = 20;
            shell.setLayout(layout);
            shell.setText("用戶登錄");

    2.創建窗口上的元素,其中下面的兩個button由一個使用RowLayout的組件來包容。
            name = new Label(shell, SWT.NONE);
            name.setText("用戶名");
            nameText = new Text(shell, SWT.SINGLE | SWT.BORDER);
            pass = new Label(shell, SWT.NONE);
            pass.setText("密碼");
            passText = new Text(shell, SWT.SINGLE | SWT.BORDER);
            passText.setEchoChar('*');
            passText.setTabs(2);
            bottom = new Composite(shell, SWT.NONE);
            RowLayout rowLayout = new RowLayout();
            rowLayout.justify = true;  //justify定義組件在容器中分散開,效果類似于swing的FlowLayout
            bottom.setLayout(rowLayout);

    3.定義name標簽的位置。它的頂邊離父組件(窗口shell)的空白邊距離是父組件clientArea(除空白邊以外的空間)高度(height)的15%,偏移的點數(points)為0。
    FormData data = new FormData();
            data.top = new FormAttachment(15, 0);
            name.setLayoutData(data);

    4.定義name文本輸入的位置。它的頂邊在name標簽的中心位置(這不是正確的表達,但程序是這樣解釋,事實上它的中心位置與name標簽在同一條水平線上),左邊距name標簽的右邊有10個點。
    data = new FormData();
            data.top = new FormAttachment(name, 0, SWT.CENTER);
            data.left = new FormAttachment(name, 10, SWT.RIGHT);
            nameText.setLayoutData(data);

    5.定義pass標簽的位置。它的頂邊距name標簽的底邊有10個點數的偏移。
    data = new FormData();
            data.top = new FormAttachment(name, 10, SWT.BOTTOM);
            pass.setLayoutData(data);

    6.定義pass文本輸入的位置。它的頂邊在name標簽的中心位置(同上),左邊與name文本框的左邊對齊。
    data = new FormData();
            data.top = new FormAttachment(pass, 0, SWT.CENTER);
            data.left = new FormAttachment(nameText, 0, SWT.LEFT);
            passText.setLayoutData(data);

    7.定義bottom組件的位置。它的頂邊距pass標簽的底邊15個點數,左邊與pass標簽的左邊對齊,右邊與pass文本輸入的右邊對齊。
            data = new FormData();
            data.top = new FormAttachment(pass, 15, SWT.BOTTOM);
            data.left = new FormAttachment(pass, 0, SWT.LEFT);
            data.right = new FormAttachment(passText, 0, SWT.RIGHT);
            bottom.setLayoutData(data);

    完整的源碼
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.SelectionAdapter;
    import org.eclipse.swt.events.SelectionEvent;
    import org.eclipse.swt.graphics.Rectangle;
    import org.eclipse.swt.layout.FormAttachment;
    import org.eclipse.swt.layout.FormData;
    import org.eclipse.swt.layout.FormLayout;
    import org.eclipse.swt.layout.RowLayout;
    import org.eclipse.swt.widgets.Button;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Label;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Text;

    import cn.com.efly.clientframe.core.Hook;

    /**
     * @author efly
     * @version 1.0.0,11/22/02
     */
    public final class LoginUI {
        private Display display;
        private Shell shell;
        private Composite bottom;
        private Label name;
        private Label pass;
        private Text nameText;
        private Text passText;
        private Button ok;
        private Button exit;
        private Rectangle clientArea;
        private RootHook rootHook;

        public LoginUI(Hook hook) {
            rootHook = (RootHook) hook;
        }

        /**
         * 顯示登陸界面
         */
        public void show() {
            Display.getDefault().dispose();
            display = new Display();
            clientArea = display.getClientArea();
            shell = new Shell(display, SWT.TITLE);
            FormLayout layout = new FormLayout();
            layout.marginHeight = 10;
            layout.marginWidth = 20;
            shell.setLayout(layout);
            shell.setText("用戶登錄");

            name = new Label(shell, SWT.NONE);
            name.setText("用戶名");
            nameText = new Text(shell, SWT.SINGLE | SWT.BORDER);
            pass = new Label(shell, SWT.NONE);
            pass.setText("密碼");
            passText = new Text(shell, SWT.SINGLE | SWT.BORDER);
            passText.setEchoChar('*');
            passText.setTabs(2);
            bottom = new Composite(shell, SWT.NONE);
            RowLayout rowLayout = new RowLayout();
            rowLayout.justify = true;
            bottom.setLayout(rowLayout);
            ok = new Button(bottom, SWT.PUSH);
            ok.setText("確定");
            ok.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent event) {
                    ok();
                }
            });
            exit = new Button(bottom, SWT.PUSH);
            exit.setText("取消");
            exit.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent event) {
                    cancel();
                }
            });

            FormData data = new FormData();
            data.top = new FormAttachment(15, 0);
            name.setLayoutData(data);

            data = new FormData();
            data.top = new FormAttachment(name, 0, SWT.CENTER);
            data.left = new FormAttachment(name, 10, SWT.RIGHT);
            nameText.setLayoutData(data);

            data = new FormData();
            data.top = new FormAttachment(name, 10, SWT.BOTTOM);
            pass.setLayoutData(data);

            data = new FormData();
            data.top = new FormAttachment(pass, 0, SWT.CENTER);
            data.left = new FormAttachment(nameText, 0, SWT.LEFT);
            passText.setLayoutData(data);

            data = new FormData();
            data.top = new FormAttachment(pass, 15, SWT.BOTTOM);
            data.left = new FormAttachment(pass, 0, SWT.LEFT);
            data.right = new FormAttachment(passText, 0, SWT.RIGHT);
            bottom.setLayoutData(data);

            shell.pack();
            Rectangle shellBounds = shell.getBounds();
            shell.setLocation(
                (clientArea.width - shellBounds.width) / 2,
                (clientArea.height - shellBounds.height) / 2);

            shell.open();

            while (!shell.isDisposed()) {
                if (!display.readAndDispatch())
                    display.sleep();
            }
        }

        private void dispose() {
            display.dispose();

        }

        private void cancel() {
            dispose();
        }

        private void ok() {
            verify();
        }

        private void verify() {
            rootHook.runPlatform();
        }

            public static void main(String[]){
                    new LoginUI(null).show();
            }
    }


    本文的討論也很精彩,瀏覽討論>>


    JavaEye推薦




    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲乱码日产精品一二三| 2020天堂在线亚洲精品专区| 成全视频免费高清| 久久国产精品免费观看| 国产亚洲日韩在线a不卡| 国产精品亚洲精品| 亚洲视频在线观看免费| 99re免费99re在线视频手机版| 免费精品国自产拍在线播放| 亚洲国产成人久久综合一区| 自拍偷自拍亚洲精品第1页 | 亚洲高清无在码在线无弹窗 | 污污的视频在线免费观看| 亚洲国产成人无码av在线播放| 久久亚洲中文字幕精品一区四| 日韩免费毛片视频| 久久精品国产这里是免费| free哆拍拍免费永久视频| jizzjizz亚洲日本少妇| 亚洲av无码不卡久久| 久久久久亚洲精品天堂| 伊人亚洲综合青草青草久热| 亚洲成a人片在线观看日本麻豆 | 在线看片无码永久免费视频| 国产白丝无码免费视频| 中国一级毛片视频免费看| 中国极品美軳免费观看| 亚洲五月午夜免费在线视频| 黄页免费视频播放在线播放| 国产亚洲精品2021自在线| 午夜亚洲国产理论片二级港台二级| 99亚偷拍自图区亚洲| 亚洲欧美一区二区三区日产| 亚洲精品乱码久久久久蜜桃| 国产亚洲精品美女久久久久 | 国产高潮久久免费观看| 亚洲乱码av中文一区二区| 亚洲国产成人久久精品软件| 亚洲精品456人成在线| 亚洲精品日韩专区silk| 久久精品7亚洲午夜a|