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

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

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

    posts - 20, comments - 16, trackbacks - 0, articles - 0

    SWT/JFace 事件的四種寫法(轉(zhuǎn))

    Posted on 2008-01-04 16:15 Raul Gong 閱讀(772) 評論(0)  編輯  收藏 所屬分類: eclipse
    轉(zhuǎn)自:http://blog.csdn.net/yjyvsdream/archive/2007/04/05/1552978.aspx 
    好像樓主也是轉(zhuǎn)自《Eclipse 從入門到精通》,非常感謝ChenGang。

    SWT/JFace 事件的四種寫法

    SWT 的事件模型和 JAVA 標準的 AWT 基本一樣的。下面將按照,事件的四種寫法來實現(xiàn)它。下面的代碼都是和上一個學習筆記里的小例子變化來的。

    • 匿名內(nèi)部類寫法  

    在原來代碼行"HelloWorldText = new Text(shell, SWT.BORDER);"下面插入如下的代碼:

            HelloWorldText.addMouseListener(new MouseAdapter(){
                
    public void mouseDoubleClick(MouseEvent e) {
                    MessageDialog.openInformation(
    null,"","Hello world");
                }

            }
    );

    new MouseAdapter(); 就是一個匿名內(nèi)部類。 我們建立了一個繼承于MouseAdapter的類,但并沒有給這個類命名,并且沒有用通常的寫法,而是直接在HelloWorldText.addMouseListener()中,寫下了這個類的代碼,這就是所謂的匿名內(nèi)部類。

    缺點:

    1. 由于事件處理,代碼會隨著組件一起分散到代碼中的各個部分,不集中,導致閱讀和維護的不便。
    2. 各事件的處理全部由嵌套的程序塊組成,視覺上很亂,如果事件處理代碼很長,也會導致閱讀和維護不便。
    3. 當菜單欄,工具欄等也需要處理相同的用戶行為時,無法重用事件中的處理代碼,導致代碼不夠簡潔。
    • 命名內(nèi)部類寫法

         事件代碼使用命名內(nèi)部類的方式,可以解決匿名內(nèi)部類的存在的問題, 首先,事件處理代碼都集中在一起,并具有有意義的名字,程序容易閱讀和維護;另外單個事件的處理程序也可以被工具欄,菜單欄等重用。代碼如下:

    public class HelloWorld {
        
    private static Text HelloWorldText;

        
    public static void main(String[] args) {
            ... ...
            HelloWorldText 
    = new Text(shell, SWT.BORDER);        
            HelloWorldText.addMouseListener(
    new MyMouseDoubleClick());//引用定義的類
            ... ...
        }

        
    // 定義一個匿名內(nèi)部類
        private static final class MyMouseDoubleClick extends MouseAdapter{
            
    public void mouseDoubleClick(MouseEvent e) {
                MessageDialog.openInformation(
    null,"","Hello ... ai wo , ni shi wo de !!!");
            }
            
        }

    }

     

    • 外部類寫法

         這種寫法和命名內(nèi)部類有些相似,只不過是將MyMouseDoubleClick類從HelloWorld.java 中拿出去,單獨寫成一個類文件。代碼和命名內(nèi)部類的相同,我就不重復了。

    • 實現(xiàn)監(jiān)聽接口的寫法

         將HelloWorld 類實現(xiàn) MouseListener 接口,這樣類本身就成了一個監(jiān)聽器,使得加入監(jiān)聽器的代碼可以更加的簡潔,這種方式適合加入監(jiān)聽器的組件較多,并且要求監(jiān)聽器的事件處理代碼可以被組件共用。
        實現(xiàn)MouseListener接口要寫的事件方法多一些,沒有用到的可以為空實現(xiàn)。如果繼承MouseListener 接口的適配器MouseAdapter, 則只寫需要的方法就可以了。另外需要注意的是,只有接口才有多繼承的特性,所以,如果HelloWorld已經(jīng)是某個類的子類了,就只能用實現(xiàn)接口的方式,而不能繼承接口的適配器了。代碼如下:

    public class HelloWorld implements MouseListener// or extends MouseAdapter
        public static void main(String[] args) {
            
    final Display display = Display.getDefault();
            
    final Shell shell = new Shell();
            shell.setSize(
    500375);
            shell.setText(
    "SWT Application");
            shell.open();

            Text HelloWorldText 
    = new Text(shell, SWT.BORDER);
            HelloWorldText.addMouseListener(
    new HelloWorld());
            HelloWorldText.setText(
    "HelloWorld");
            HelloWorldText.setBounds(
    526834929);
            shell.layout();
            
    while (!shell.isDisposed()) {
                
    if (!display.readAndDispatch())
                    display.sleep();
            }

        }
      

        
    public void mouseDoubleClick(MouseEvent e) {
            MessageDialog.openInformation(
    null,"","Hello ... ai wo de re  !!");
        }


        
    //if extends MouseAdapter , delete the follow methods 
        public void mouseDown(MouseEvent e) {        
        }


        
    public void mouseUp(MouseEvent e) {     
        }

    }

     

    SWT/JFace 中常用的事件

        除了,上面用到的addMouseListener, Eclipse 還有一些常用的監(jiān)聽器,它們在各組件里的使用方法相同(如果該組件支持此種事件),簡單介紹如下:

    addSelectionListener: 這個監(jiān)聽器最常用。
    widgetSelected 方法:當組件被選擇(單擊鼠標或按回車鍵)時觸發(fā)此方法的事件處理程序。
    widgetDefaultSelected 方法: 用于某些很少觸發(fā)選擇事件的組件,例如:文本框回車事件,列表框雙擊事件等。

    addKeyListener:
    keyPressed 方法:當前焦點停留在組件時,按下鍵盤任意鍵時觸發(fā),但對于某些組件(如:button),按回車鍵無法執(zhí)行此方法。
    keyReleased方法: 按鍵彈起時觸發(fā)。

    addFocusListener
    focusGained方法: 得到焦點時觸發(fā)。
    focusLost方法: 失去焦點時觸發(fā)。

    主站蜘蛛池模板: 亚洲情a成黄在线观看动漫尤物| www国产亚洲精品久久久| 亚洲gay片在线gv网站| 日韩欧美亚洲中文乱码| 免费观看成人毛片a片2008| 亚洲欧洲另类春色校园小说| 最近最新高清免费中文字幕| 亚洲国产精品国自产电影| 18女人毛片水真多免费| 亚洲黄色片在线观看| 最近中文字幕2019高清免费| 中文字幕亚洲综合精品一区| 国产成人精品免费视| 亚洲一区二区免费视频| 毛片免费观看网址| 久久亚洲中文无码咪咪爱| 免费在线观看中文字幕| 国产特黄特色的大片观看免费视频| 亚洲国产激情一区二区三区| 中国一级毛片视频免费看| 亚洲一区影音先锋色资源| 91免费国产精品| 亚洲无mate20pro麻豆| 免费日韩在线视频| 84pao国产成视频免费播放| 中文字幕亚洲综合久久2| 国产大片免费网站不卡美女 | 亚洲精品成人av在线| 91香蕉成人免费网站| 大桥未久亚洲无av码在线 | 亚洲av麻豆aⅴ无码电影| 99精品免费视品| 大学生高清一级毛片免费| 另类小说亚洲色图| 国产成人无码综合亚洲日韩 | 国产jizzjizz免费视频| 东方aⅴ免费观看久久av| 亚洲1区1区3区4区产品乱码芒果 | 国产精品99久久免费| 亚洲av无码片区一区二区三区| 午夜免费福利网站|