<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 閱讀(305) 評論(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推薦




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


    網站導航:
     
    主站蜘蛛池模板: 成人爱做日本视频免费| 在线看片免费人成视久网| 午夜高清免费在线观看| 亚洲人成网站在线观看播放动漫 | 国产午夜无码精品免费看| 亚洲AV无码一区二区三区DV | 亚洲永久永久永久永久永久精品| a高清免费毛片久久| 在线成人爽a毛片免费软件| 亚洲成a人片在线观看无码 | 中文字幕在线视频免费| 国产亚洲av片在线观看18女人 | 成人免费AA片在线观看| 亚洲av成人一区二区三区| 亚洲免费网站观看视频| 亚洲丁香婷婷综合久久| 一级毛片免费观看不卡的| 亚洲午夜久久影院| 国产成人午夜精品免费视频| 亚洲精品无码久久久久久| 国产一区在线观看免费| aa在线免费观看| 亚洲精品高清国产一久久| 99视频全部免费精品全部四虎| 亚洲国产成人精品无码区在线网站| 性xxxxx免费视频播放| 亚洲丰满熟女一区二区哦| 国产亚洲欧洲Aⅴ综合一区| 永久免费A∨片在线观看| 亚洲w码欧洲s码免费| 免费看国产精品麻豆| 中国一级特黄的片子免费 | 日本免费一区二区三区最新| 一级中文字幕乱码免费| 亚洲日本精品一区二区| 成年女人午夜毛片免费视频| 亚洲av无码专区国产乱码在线观看| 亚洲一级毛片免费观看| mm1313亚洲国产精品无码试看| 伊人久久精品亚洲午夜| 一本岛高清v不卡免费一三区|