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

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

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

    FORTUNE

    THE WAY TO THE MASTER...
    posts - 49, comments - 18, trackbacks - 0, articles - 1
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    實(shí)戰(zhàn)SWT布局

    Posted on 2006-03-23 17:00 fortune 閱讀(699) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): java技術(shù)
    標(biāo)準(zhǔn)的SWT布局類(lèi)
    FillLayout:在容器中以相同的大小單行或單列的排列組件
    RowLayout:以單行或多行的方式使用幾個(gè)選項(xiàng)(fill,wrap,spacing,justify,type)定制組件的排列方式
    GridLayout:類(lèi)似于swing的GridLayout的方式以格子的方式排列組件
    FormLayout(SWT?2.0的新特性):通過(guò)定義組件四個(gè)邊的“粘貼”位置來(lái)排列組件,被引用的相對(duì)的組件可以父組件,也可以是同一容器中的其它組件。
    在SWT中,可以由用戶(hù)自定義布局類(lèi)。

    在簡(jiǎn)單的布局中,使用FillLayout和RowLayout也許就夠用了,也比較簡(jiǎn)單。但是通常的布局都比較復(fù)雜,而且要求很精確。無(wú)論復(fù)雜程度如何,都可以由GridLayout或FormLayout來(lái)完成。通常GridLayout與FormLayout可以做成同樣的效果,但是使用FormLayout更有效,不會(huì)像GridLayout產(chǎn)生resize導(dǎo)致的布局錯(cuò)位,也更簡(jiǎn)單。下面通過(guò)一個(gè)例子簡(jiǎn)單介紹FormLayout的使用。

    布局效果


    布局實(shí)施
    1.首先定義窗口和它的空白邊
    Display.getDefault().dispose();??//移去平臺(tái)核心啟動(dòng)畫(huà)面
    ????????display?=?new?Display();
    ????????shell?=?new?Shell(display,?SWT.TITLE);
    ????????FormLayout?layout?=?new?FormLayout();
    ????????layout.marginHeight?=?10;
    ????????layout.marginWidth?=?20;
    ????????shell.setLayout(layout);
    ????????shell.setText("用戶(hù)登錄");

    2.創(chuàng)建窗口上的元素,其中下面的兩個(gè)button由一個(gè)使用RowLayout的組件來(lái)包容。
    ????????name?=?new?Label(shell,?SWT.NONE);
    ????????name.setText("用戶(hù)名");
    ????????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定義組件在容器中分散開(kāi),效果類(lèi)似于swing的FlowLayout
    ????????bottom.setLayout(rowLayout);

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

    4.定義name文本輸入的位置。它的頂邊在name標(biāo)簽的中心位置(這不是正確的表達(dá),但程序是這樣解釋?zhuān)聦?shí)上它的中心位置與name標(biāo)簽在同一條水平線上),左邊距name標(biāo)簽的右邊有10個(gè)點(diǎn)。
    data?=?new?FormData();
    ????????data.top?=?new?FormAttachment(name,?0,?SWT.CENTER);
    ????????data.left?=?new?FormAttachment(name,?10,?SWT.RIGHT);
    ????????nameText.setLayoutData(data);

    5.定義pass標(biāo)簽的位置。它的頂邊距name標(biāo)簽的底邊有10個(gè)點(diǎn)數(shù)的偏移。
    data?=?new?FormData();
    ????????data.top?=?new?FormAttachment(name,?10,?SWT.BOTTOM);
    ????????pass.setLayoutData(data);

    6.定義pass文本輸入的位置。它的頂邊在name標(biāo)簽的中心位置(同上),左邊與name文本框的左邊對(duì)齊。
    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標(biāo)簽的底邊15個(gè)點(diǎn)數(shù),左邊與pass標(biāo)簽的左邊對(duì)齊,右邊與pass文本輸入的右邊對(duì)齊。
    ????????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("用戶(hù)登錄");

    ????????name?=?new?Label(shell,?SWT.NONE);
    ????????name.setText("用戶(hù)名");
    ????????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();
    ????????}
    }
    主站蜘蛛池模板: 青青操视频在线免费观看| 拨牐拨牐x8免费| 亚洲AV无码乱码在线观看代蜜桃| 99在线观看视频免费| 无码免费又爽又高潮喷水的视频 | 四虎影视无码永久免费| 亚洲综合免费视频| 久久久久亚洲AV无码专区首| 女人18毛片a级毛片免费视频| 无码人妻AV免费一区二区三区| 在线观看亚洲免费| 国产精品无码亚洲精品2021| 亚洲成a人片在线观| 亚洲最大中文字幕| 亚洲看片无码在线视频| 亚洲精品第一综合99久久| 亚洲性色高清完整版在线观看| 亚洲精品亚洲人成在线观看麻豆 | 亚洲日韩国产精品乱-久| 亚洲国产成人精品无码区在线观看 | 2019中文字幕免费电影在线播放 | 亚洲综合久久1区2区3区| 亚洲精品在线观看视频| 亚洲国产精品综合久久久| 国产日本亚洲一区二区三区| 最新亚洲人成网站在线观看| 美女一级毛片免费观看| 日本激情猛烈在线看免费观看| 一本久久A久久免费精品不卡| 在线看片免费人成视频播| 99久久国产热无码精品免费 | 99久久亚洲精品无码毛片| 456亚洲人成在线播放网站| 亚洲欧洲无码AV不卡在线| 永久免费观看黄网站| 99热这里只有精品6免费| 国产一区在线观看免费| 久久国产精品亚洲综合| 国产精品亚洲一区二区在线观看| 国产特黄一级一片免费 | 亚洲午夜精品久久久久久浪潮|