<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方法: 失去焦點時觸發。

    主站蜘蛛池模板: 国产一区二区三区亚洲综合| 亚洲国产精品无码观看久久| WWW国产成人免费观看视频| 全免费a级毛片免费**视频| 久久久亚洲欧洲日产国码aⅴ| 一区二区三区无码视频免费福利 | 皇色在线免费视频| 亚洲国产精品成人| 亚洲免费无码在线| 亚洲欧洲日产国码无码网站| 免费无码一区二区三区蜜桃| 久久综合日韩亚洲精品色| 8888四色奇米在线观看免费看| 99久久精品国产亚洲| 日韩欧美一区二区三区免费观看| 亚洲а∨天堂久久精品9966| 国产精品视频免费一区二区三区| 日韩在线观看视频免费| 国产偷国产偷亚洲高清日韩 | 亚洲免费一级视频| 99热亚洲色精品国产88| 国产精品酒店视频免费看| a级毛片免费网站| 色拍自拍亚洲综合图区| 免费无码AV电影在线观看| 国产大陆亚洲精品国产| 亚洲日产无码中文字幕| 亚洲精品视频免费在线观看| 亚洲最大无码中文字幕| 亚洲伊人久久综合影院| 一区二区三区观看免费中文视频在线播放| 亚洲熟妇av一区二区三区下载| 免费看大美女大黄大色| 二区久久国产乱子伦免费精品| 亚洲视频网站在线观看| 国产免费私拍一区二区三区| 最近免费中文字幕MV在线视频3| 亚洲人成网站在线观看播放动漫| 日韩免费观看的一级毛片| 免费播放在线日本感人片| 亚洲第一成人在线|