<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 事件的四種寫法(轉)

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

    SWT/JFace 事件的四種寫法

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

    • 匿名內部類寫法  

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

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

            }
    );

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

    缺點:

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

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

    public class HelloWorld {
        
    private static Text HelloWorldText;

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

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

    }

     

    • 外部類寫法

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

    • 實現監聽接口的寫法

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

    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 還有一些常用的監聽器,它們在各組件里的使用方法相同(如果該組件支持此種事件),簡單介紹如下:

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

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

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

    主站蜘蛛池模板: 中文字幕不卡免费高清视频| 亚洲熟妇av午夜无码不卡 | 免费在线观看黄网| 午夜亚洲AV日韩AV无码大全| 久久久精品午夜免费不卡| 精品国产亚洲一区二区三区| 日本在线免费播放| 亚洲第一页在线观看| 日韩免费精品视频| 亚洲国产欧洲综合997久久| 国产成人无码免费视频97| 欧亚一级毛片免费看| 亚洲一区二区三区自拍公司| 免费成人在线视频观看| 亚洲黄色高清视频| 欧洲一级毛片免费| 久久亚洲色WWW成人欧美| 亚洲日本一区二区三区在线不卡| 亚洲国产综合无码一区| 久久精品一区二区免费看| 亚洲伊人久久精品| 亚洲国产黄在线观看| 嫩草影院在线播放www免费观看| **一级毛片免费完整视| 亚洲人成人无码.www石榴| 亚洲高清最新av网站| 久久精品国产这里是免费| 亚洲videosbestsex日本| 全部免费毛片在线| 中国好声音第二季免费播放| 青青草原精品国产亚洲av| 大陆一级毛片免费视频观看i| 婷婷亚洲综合五月天小说 | 亚洲精品人成无码中文毛片| 久99久无码精品视频免费播放| 日韩成人在线免费视频| 两个人日本WWW免费版| 成人亚洲国产va天堂| 亚洲福利精品一区二区三区| 131美女爱做免费毛片| 边摸边吃奶边做爽免费视频网站 |