<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中的工具條和菜單

    前一節(jié)中我們簡單介紹了一下 Action 。其實所謂的 Action 就是一個最常用的事件,舉個例子來說,對于一個按鈕來說它可以有多個事件,比如按鍵,焦點,鼠標(biāo),等等等等吧,但是實際上在使用程序的時候,我們最關(guān)心的,就是按下去這個按鈕會發(fā)生什么,這個其實就是所謂的 Action 。如果大家以前做過 swing/awt 變成的話,應(yīng)該對 Action 不會陌生。

    JFace 里面,一個 Action 可以對應(yīng)多個 GUI 對象,這些對象就是所謂的 Contribution Item 。比如我們在一般程序里面很常見的“文件”菜單,下面都會有“新建”,“保存”等等。同時我們可以在工具條上放置相應(yīng)的按鈕,那么這些都是有相同的功能,在 JFace 里面我們可以只寫一個 Action ,然后把它映射到不同的 ContributionItem 去,而不必為每個部件都寫一串處理事件。

    我們下面還是通過一個簡單的例子來說明,在 JFace 中怎么使用菜單和工具條這兩種最基本也是最有用的 Contribution Item

    我們這個程序?qū)懙煤苌担褪且粋€光禿禿的窗口上做了一個菜單和工具條按鈕,功能也只有一個,就是每次點一下,就彈出一個輸入框來問你名字是什么,然后顯示一個 Hello, xxx 之類的。

    首先我們還是來寫一個 Action 類:

    ?1?
    ?2?public?class?SayHiAction?extends?Action?{
    ?3?????private?Shell?shell;
    ?4?
    ?5?????public?SayHiAction(Shell?shell)?{
    ?6?????????super();
    ?7?????????this.shell?=?shell;
    ?8?????????this.setText("Say&Hi@Ctrl+H");
    ?9?????}
    10?
    11?????@Override
    12?????public?void?run()?{
    13?????????InputDialog?input?=?new?InputDialog(shell,?"Input?your?name",
    14?????????????????"Please?input?your?name?here:",?null,?null);
    15?????????if?(input.open()?==?Window.OK)?{
    16?????????????MessageDialog.openInformation(shell,?"Hello",?"Hello,?"
    17?????????????????????+?input.getValue()?+?"!");
    18?????????}
    19?
    20?????}
    21?
    22?}
    23?



    代碼段 17

    這只是一個很簡單的 Action 類,沒有太多可說的。

    然后我們創(chuàng)建一個 ApplicationWindow 類:

    ?1?
    ?2?public?class?Hiyou?extends?ApplicationWindow?{
    ?3?
    ?4?????private?SayHiAction?hiaction;
    ?5?????public?Hiyou(Shell?parentShell)?{
    ?6?????????super(parentShell);
    ?7?????????hiaction=new?SayHiAction(getShell());
    ?8?????????addMenuBar();
    ?9?????????addToolBar(SWT.FLAT?|?SWT.WRAP);
    10?????}
    11?
    12?????@Override
    13?????protected?ToolBarManager?createToolBarManager(int?style)?{
    14?????????ToolBarManager?toolbar=new?ToolBarManager();
    15?????????toolbar.add(hiaction);
    16?????????return?toolbar;
    17?????}
    18?
    19?????@Override
    20?????protected?MenuManager?createMenuManager()?{
    21?????????MenuManager?menubar=new?MenuManager();
    22?????????MenuManager?fileMenu=new?MenuManager("&File");
    23?????????fileMenu.add(hiaction);
    24?????????menubar.add(fileMenu);
    25?????????return?menubar;
    26?????}
    27?
    28?????/**
    29??????*?@param?args
    30??????*/
    31?????public?static?void?main(String[]?args)?{
    32?????????Hiyou?window=new?Hiyou(null);
    33?????????window.setBlockOnOpen(true);
    34?????????window.open();
    35?????????Display.getCurrent().dispose();
    36?????}
    37?
    38?}
    39?

    ?

    代碼段 18

    大家可能已經(jīng)注意到了,在這里面我們重載了 createMenuManager createToolBarManager 兩個方法,它們的用途就和名字一樣,一個是用來創(chuàng)建菜單的,一個是用來創(chuàng)建工具條的。重載了這兩個方法以后,通過在構(gòu)造函數(shù)中調(diào)用 addMenuBar addToolBar 讓工具條和菜單顯示出來。

    這里值得一提的是 MenuManager ToolBarManager 類,如果大家翻一下 API 文檔的話會發(fā)現(xiàn)它們都是所謂的 contribution manager (實現(xiàn)了 IConntributionManager 接口),你可以通過這些 contribution manager 來實現(xiàn)對特定組件的管理(添加刪除等等)。

    具體到菜單的創(chuàng)建,看了我們上面的代碼就很明白了,就直接調(diào)用相應(yīng) MenuManager add 方法把 action 添加上就可以了。 JFace 會自動找到這個 Action getText 方法設(shè)置菜單的文字。如果是有好幾層菜單,那么只要在重新 new 一個 MenuManager 添加到已有的 MenuManager 里面就可以了。就象前面代碼中的:

    menubar.add(fileMenu);



    至于工具條就更簡單了,創(chuàng)建一個 ToolBarManager 然后直接 add 對應(yīng)的 Action 就可以了。

    添加圖標(biāo)

    如果菜單只是文字還沒有什么,如果你的工具條都是文字是不是會顯得干巴巴的?其實只要我們?yōu)?/span> Action 設(shè)置 ImageDescriptor 就可以了,比如你可以自己畫一個圖標(biāo)保存到 Action 的包下面(我畫了一個 hi.gif ),然后把 Action 的構(gòu)造函數(shù)改寫成這樣:

    public ?SayHiAction(Shell?shell)?{
    ????????
    super ();
    ????????
    this .shell? = ?shell;
    ????????
    this .setText( " Say&Hi@Ctrl+H " );
    ????????
    this .setImageDescriptor(ImageDescriptor.createFromFile( this .getClass(),
    ????????????????
    " hi.gif " ));
    ????}



    大家注意最后一句話,就是為 action 設(shè)置圖標(biāo)的。然后再運行一下就會發(fā)現(xiàn)菜單和工具欄都有圖標(biāo)了。

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


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


    網(wǎng)站導(dǎo)航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    <2006年12月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(2)

    隨筆檔案

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: A国产一区二区免费入口| 性感美女视频在线观看免费精品 | 久久精品亚洲一区二区三区浴池| 无码人妻一区二区三区免费看| 亚洲啪啪免费视频| 亚洲成人国产精品| 99热这里只有精品6免费| 蜜臀亚洲AV无码精品国产午夜.| 亚洲精品白浆高清久久久久久| 美女视频黄是免费的网址| h在线看免费视频网站男男| 亚洲综合一区二区| 亚洲国产高清在线一区二区三区| 16女性下面扒开无遮挡免费| 男女超爽视频免费播放| 久久久久久亚洲Av无码精品专口| 免费人妻av无码专区| 性xxxxx免费视频播放| 中文字幕成人免费高清在线| 亚洲情A成黄在线观看动漫软件| 亚洲精品国产精品乱码视色| 日本特黄a级高清免费大片| 91精品国产免费久久国语麻豆| 美女被爆羞羞网站免费| 亚洲另类古典武侠| 亚洲成A∨人片在线观看不卡| 四虎影视永久免费观看| 国产一卡二卡四卡免费| 日韩成人免费视频| 国产精品1024在线永久免费| 亚洲精品无AMM毛片| 亚洲三级中文字幕| 亚洲国产精品一区二区久久| AV在线播放日韩亚洲欧| 免费无遮挡无码视频网站| 69av免费观看| 日韩精品无码一区二区三区免费| 国产福利在线观看永久免费| 国产精品亚洲精品日韩动图| 亚洲色精品VR一区区三区 | 337p日本欧洲亚洲大胆人人 |