eclipse学习笔记!(3) ----- SWT Designer 下 SWT/JFace 事件的四种写法以及常用的事件

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方法: 失去焦点时触发。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值