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

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

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

    我的JAVA窩! - BlogJava

    SWT/JFace開發(fā)入門指南(九)〈轉(zhuǎn)帖〉

    JFace Hello,world

    我們?nèi)匀皇菑囊粋€(gè)最簡單的 Hello,world! 開始介紹 JFace 。為了更形象一些,首先把程序列出來:

    ?1?
    ?2?public?class?HelloJface?extends?Window?{
    ?3?
    ?4?????public?HelloJface(Shell?arg0)?{
    ?5?????????super(arg0);
    ?6?????}
    ?7???????@Override
    ?8?????protected?Control?createContents(Composite?parent)?{
    ?9?????????Text?text?=?new?Text(parent,?SWT.NONE);
    10?????????text.setText("Hello,world!");
    11?????????return?parent;
    12?
    13?????}
    14?????/**
    15??????*?@param?args
    16??????*/
    17?????public?static?void?main(String[]?args)?{
    18?
    19?????????HelloJface?demo?=?new?HelloJface(null);
    20?????????demo.setBlockOnOpen(true);
    21?????????demo.open();
    22?????????Display.getCurrent().dispose();
    23?
    24?????}
    25?}
    26?

    代碼段12

    首先我們從這段代碼來看一下使用 JFace 和單純地使用 swt 寫程序有什么不一樣:

    swt 程序中,我們需要自己創(chuàng)建 Display ,自己創(chuàng)建 Shell ,但是在這里,我們只需要:

    創(chuàng)建一個(gè)繼承自 Window org.eclipse.jface.window.Window )的類

    在這個(gè)類的 createContents 方法中為窗口添加部件

    將這個(gè)對象的 blockOnOpen 屬性設(shè)定為 true ,這個(gè)屬性的含義就和它的名字一樣,窗口會一直保持打開的狀態(tài)(接收各種事件)直到被關(guān)閉。

    調(diào)用這個(gè)對象的 open 方法即打開了窗口

    由于設(shè)定了 blockOnOpen ,窗口會保持接受各種事件,知道用戶(或者程序)關(guān)閉了它。

    在關(guān)閉以后,程序繼續(xù)向下運(yùn)行,我們需要將資源釋放掉,所以有了這樣一句話:

    Display.getCurrent().dispose();

    其中 Display.getCurrent() 得到了程序的 display 對象,并進(jìn)而調(diào)用 dispost() 方法釋放了各種資源。

    其實(shí)這也是我們寫一個(gè) JFace 程序一般的步驟,當(dāng)然我們可能還會添加事件處理之類,但是大體上都是這樣的。

    因?yàn)檫@個(gè)程序運(yùn)行的結(jié)果其實(shí)和我們以前 swt Hello,world! 是一樣的,所以在這里我也不再貼圖了。大家可以自己運(yùn)行看一下。

    Window ApplicationWindow Dialog

    關(guān)于 Window Q&A

    JFace 中的 Window 就是一個(gè)窗口。我們知道在 swt 中窗口是用 Shell 表示的,而 JFace 中的 Window 其實(shí)也可以看作是對于 Shell 的一種封裝。

    org.eclipse.jface.window.Window 中,有幾個(gè)方法需要我們注意,為了更加突出各自的功能,我把這些介紹寫成 Q&A 的形式:

    Q :如何為窗體添加各種功能部件?

    A 方法就是重載 createContents 方法,這個(gè)方法中我們可以給窗體中創(chuàng)建一些子部件,比如 Text,Lable,Composite 之類,在前面的 demo 中我們是只創(chuàng)建了一個(gè)文本框。

    Q :如何定義窗體的風(fēng)格?

    A 可以通過調(diào)用 setShellStyle 方法來設(shè)定窗體的風(fēng)格,比如如果我們在前面程序的 main 函數(shù)中添加這樣一句話(在 demo.open(); 之前):

    demo.setShellStyle(SWT.DIALOG_TRIM);

    那么出現(xiàn)的就是一個(gè)對話框風(fēng)格的窗體。

    Q: 如何定義窗體的 Layout ,標(biāo)題等屬性

    A 可以通過重載 configureShell 方法實(shí)現(xiàn),比如下面這樣一段程序:

    @Override
    ????
    protected ? void ?configureShell(Shell?shell)?{
    ????????
    ??????shell.setText(
    " JFace?Window " );
    ??????shell.setLayout(
    new ?RowLayout(SWT.VERTICAL));
    ????}

    就設(shè)定了窗口標(biāo)題為“ JFace Window ”, Layout 也設(shè)定為 RowLayout

    默認(rèn)窗體的 Layout GridLayout

    這個(gè)簡短的 Q&A 就到這里為止。對于 Window 的介紹也到這里告一段落,下面我們簡單地看一下 Window 的兩個(gè)子類: ApplicationWindow org.eclipse.jface.window.ApplicationWindow )和 Dialog org.eclipse.jface.dialogs.Dialog

    ApplicationWindow

    ApplicationWindow 除了具有 Window 的特性以外,還允許我們方面地添加菜單,工具條( Toolbar 或者 Coolbar ),狀態(tài)條之類的。關(guān)于這方面的特性我會在后面的文章中做單獨(dú)介紹,這里就不再贅述了。

    對話框

    JFace 中的 Dialog 是一個(gè)抽象類,所以你必須使用它的子類或者自己寫一個(gè)它的子類。當(dāng)然了,實(shí)際上你根本沒有必要去自己繼承。

    離題萬里: swt 中的 MessageBox

    關(guān)于對話框,首先我要給大家介紹的卻是一個(gè) swt 中的 MessageBox org.eclipse.swt.widgets.MessageBox )。實(shí)際上,如果你看過這個(gè)系列文章中介紹 swt 事件模式的內(nèi)容的話,可能早就注意到我在里面使用過 MessageBox 了。

    Swt 中的 MessageBox 允許我們通過指定風(fēng)格來改變對話框的外觀,比如如果對話框的風(fēng)格中包含 SWT.OK ,它就會有一個(gè)確定按鈕;如果包含 SWT.CANCEL ,就會有一個(gè)取消按鈕,如果包含 ICON_QUESTION 那么彈出的對話框就有一個(gè)問號圖標(biāo),等等吧。

    比如我們看下面這段程序:

    ??????MessageBox?dialog = new ?MessageBox(shell,SWT.OK | SWT.ICON_INFORMATION);
    ??????dialog.setText(
    " Hello " );
    ??????dialog.setMessage(
    " Hello,world! " );
    ??????dialog.open();

    代碼段 13

    這里我們從構(gòu)造函數(shù)的 style 參數(shù)可以看出,這是一個(gè)帶有信息圖標(biāo)(一個(gè)感嘆號)和一個(gè)確定按鈕的對話框。具體圖示見下面:

    ?14

    對比: JFace 中的 MessageDialog

    前面一小節(jié)中,我簡單介紹了一下 swt 中的 MessageBox 。在 JFace 中,我們使用 MessageDialog org.eclipse.jface.dialogs.MessageDialog )來實(shí)現(xiàn)類似的功能。

    如果要實(shí)現(xiàn)我們在上面所演示的那樣一個(gè)帶信息提示和確定按鈕的對話框,我們只需要這樣寫:

    MessageDialog.openInformation(shell, " Hello " , " Hello,world " );

    運(yùn)行出來以后,對話框的大小可能和 swt 中的有一些區(qū)別。不過這樣是不是很方便呢?其實(shí) JFace 能做的事情通過 swt 編程也都可以做到,不過一般說來, JFace 都簡化了編程。

    MessageDialog 中,類似于 openXxxx 靜態(tài)方法還有好幾個(gè),比如:

    openWarning :打開一個(gè)帶警告圖標(biāo)的對話框

    openConfirm :打開一個(gè)只有確定和取消按鈕的對話框

    不過你也許注意到了,這些靜態(tài)方法返回類型都不一樣,有的是 void, 有的是 boolean ,這些返回值(如果有的話)就反應(yīng)了用戶選擇了哪個(gè)按鈕。比如 openConfirm ,如果按了確定,那么返回的就是 true

    輸入框: InputDialog

    相對來說,輸入對話框的用法可能會比較負(fù)責(zé)一些,你必須 InputDialog 對象,然后調(diào)用它的 open 方法打開對話框,獲得這個(gè)方法的返回值(以確定用戶是點(diǎn)擊了確定還是取消)。然后再通過 getValue() 方法獲得用戶的輸入。

    為了更加形象,我們舉一個(gè)例子。我們還是用前面的 Hello,world! 程序,不過把它的 createContents 方法改成下面一段代碼:

    ?1?@Override
    ?2?????protected?Control?createContents(final?Composite?parent)?{
    ?3?????????Button?button?=?new?Button(parent,?SWT.NONE);
    ?4?????????button.setText("Click?me!");
    ?5?????????button.addSelectionListener(new?SelectionAdapter()?{
    ?6?????????????@Override
    ?7?????????????public?void?widgetSelected(SelectionEvent?arg0)?{
    ?8?
    ?9?????????????????InputDialog?input?=?new?InputDialog(parent.getShell(),
    10?????????????????????????"Input?Dialog?Title",?"Please?input?some?string?here:",
    11?????????????????????????"initial?value",?null);
    12?????????????????if(input.open()==?Window.OK)
    13?????????????????{
    14?????????????????????System.out.println(input.getValue());
    15?????????????????}
    16?????????????}
    17?
    18?????????});
    19?????????return?parent;
    20?????}
    21?

    代碼段 14

    運(yùn)行之后,界面如下面圖示:

    15

    如果按了確定的話,控制臺會顯示你輸入的信息

    小結(jié)

    因?yàn)榍耙欢斡行┦虑椋远家恢睕]有來得及寫這個(gè)系列的文章。今天貼出的這篇文章中,通過一個(gè)簡單程序演示了一個(gè) JFace 程序的基本寫法,同時(shí)也順便提了一下 Window 和它的兩個(gè)子類。關(guān)于對話框我只向大家介紹了兩種最常用的,其實(shí)還是有很多的,這需要大家在實(shí)踐中不斷探索。

    posted on 2006-12-18 00:24 J2S 閱讀(273) 評論(0)  編輯  收藏


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


    網(wǎng)站導(dǎo)航:
     
    <2006年12月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(2)

    隨筆檔案

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产精品婷婷久久| 我要看WWW免费看插插视频| 国产高清对白在线观看免费91| 亚洲成a人无码亚洲成av无码| 亚洲国产日韩女人aaaaaa毛片在线| 久久久久久亚洲精品中文字幕| 亚洲精品无码鲁网中文电影| 亚洲色精品aⅴ一区区三区| 亚洲乱亚洲乱妇无码麻豆| 亚洲精品国产美女久久久| 亚洲AV无码乱码国产麻豆穿越| 亚洲妇熟XXXX妇色黄| 亚洲爱情岛论坛永久| 亚洲色大成网站www永久| 亚洲的天堂av无码| 亚洲香蕉在线观看| 亚洲精华液一二三产区| 极品美女一级毛片免费| 国产免费人成视频尤勿视频| 国产午夜精品久久久久免费视 | 亚洲精品美女久久7777777| 亚洲综合在线一区二区三区| 色欲aⅴ亚洲情无码AV| 一级特黄aaa大片免费看| 免费观看久久精彩视频| 亚洲免费一级视频| 午夜无遮挡羞羞漫画免费| 免费一级毛片在级播放| 永久亚洲成a人片777777| 亚洲国产成人久久综合碰碰动漫3d | 全免费a级毛片免费看| 亚洲一级免费毛片| 毛片免费观看网址| 亚洲国产精品一区二区三区久久 | 香蕉97超级碰碰碰免费公| 精品免费久久久久久成人影院| 亚洲精品国产自在久久| 久久精品国产亚洲AV网站| 亚洲男人的天堂久久精品| 黄色免费网址大全| 日本免费在线观看|