您的位置:首页 >> 编程开发 >> Java >> Java基础 >> Eclipse >> 正文
Eclipse RSS
 

Eclipse开发经典教程:SWT事件

http://www.rdxx.com 08年02月16日 00:00 我要投稿

关键词: SWT , 事件 , Eclipse , 开发 , 教程 , IP
在窗口系统中,程序一般都是以事件驱动的。SWT的Control类实现了一些事件监听的注册方法,其子类都可以通过这些方法注册鼠标键盘的监听器,通过实现这些监听器的接口,窗口组件就能响应相应的鼠标和键盘事件。
Control类是窗口组件类的基类,它定义了基本的事件监听方法,有如下一些:
addControlListener
addFocusListener
addHelpListener
addKeyListener
addMouseListener
addMouseTrackListener
addMouseMoveListener
addPaintListener
addTraverseListener 

添加事件监听器步骤如下:
1. 创建事件监听器。例如:“new KeyListener()…”。
2. 通过Control类的子类添加事件监听器。例如:“text.addKeyListener()”。

常用事件有鼠标事件、键盘事件、焦点事件、窗口控制事件和选择事件,Control类的子类也可以定义添加相关的监听方法。

  鼠标事件

在窗口系统中,鼠标基本上是必备的设备。一般来说,窗口中鼠标有鼠标单击、鼠标双击、鼠标进入窗口、鼠标退出窗口及鼠标移动等事件。

在SWT中,事件的响应是通过相应接口实现的,每个组件可以添加相应的事件响应实例来监听事件。例如“button.addMouseListener(listener)”,表示在button组件上添加鼠标的相应响应事件实例,其中,listener为实现监听器对象,下面就具体的鼠标事件进行介绍。

MouseListener接口

在SWT中,通过实现MouseListener接口来响应鼠标的按下、松开及双击事件,MouseListener接口如例程1所示。
例程1 MouseListener.java
package org.eclipse.swt.events;
import org.eclipse.swt.internal.SWTEventListener;
public interface MouseListener extends SWTEventListener {
public void mouseDoubleClick(MouseEvent e);
public void mouseDown(MouseEvent e);
public void mouseUp(MouseEvent e);
}

其中,mouseDoubleClick表示鼠标双击事件响应方法,mouseDown表示鼠标键按下事件的响应方法,mouseUp表示鼠标键起来事件的响应方法,MouseEvent为系统传入的鼠标事件的参数,MouseEvent中的button属性表示鼠标的按钮值,例如e.button等于1,表示鼠标左键按下,按钮值对应鼠标按钮如表1所示。


在程序中,开发人员可以根据e.button的值判断当前用户按的是哪一个鼠标键,从而确定采用什么操作。

MouseMoveListener接口

在SWT中,通过实现MouseMoveListener接口来响应鼠标的移动事件,MouseMoveListener接口如例程2所示。
例程2 MouseMoveListener.java

package org.eclipse.swt.events;
import org.eclipse.swt.internal.SWTEventListener;
public interface MouseMoveListener extends SWTEventListener {
public void mouseMove(MouseEvent e);
}

MouseMoveListener只有mouseMove方法,用来响应窗口中鼠标移动事件。

MouseTrackListener接口

在SWT中,通过实现MouseTrackListener接口来响应鼠标进入窗口、鼠标退出窗口和鼠标停放在窗口上的事件,MouseTrackListener接口如例程3所示。

例程3 MouseTrackListener.java

package org.eclipse.swt.events;
import org.eclipse.swt.internal.SWTEventListener;
public interface MouseTrackListener extends SWTEventListener {
public void mouseEnter(MouseEvent e);
public void mouseExit(MouseEvent e);
public void mouseHover(MouseEvent e);
} 

其中,mouseEnter表示鼠标进入窗口事件的响应方法,mouseExit表示鼠标退出窗口事件的响应方法,mouseHover表示鼠标停放在窗口上事件的响应方法。

鼠标事件实例

为了更深入地理解鼠标事件,下面通过具体的实例演示如何响应鼠标事件。该程序只是当事件触发时简单地打印出相应信息,在具体的实例中,读者可以根据需要进行修改,代码如例程4所示。
例程4 MouseEventExample.java

/**
* 为了节省篇幅,所有的import类已经被注释
* 读者可以通过ctrl+shift+o快捷键,自动引入所依赖的类
* 如果有问题可发邮件到ganshm@gmail.com
* */
public class MouseEventExample implements MouseListener, MouseMoveListener,
MouseTrackListener {
//显示信息的标签 
Label myLabel = null;
Shell shell = null;
public MouseEventExample() {
}
public void run() {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout());
shell.setSize(450, 200);
shell.setText("Mouse Event Example");
myLabel = new Label(shell, SWT.BORDER);
myLabel.setText("I ain't afraid of any old mouse");
//在当前窗口上添加鼠标响应事件 
shell.addMouseListener(this);
shell.addMouseMoveListener(this);
shell.addMouseTrackListener(this);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
public static void main(String[] args) {
new MouseEventExample().run();
}
public void mouseDoubleClick(MouseEvent e) {
myLabel.setText("Double Click " + e.button + " at: " + e.x + "," + e.y);
System.out.println("Double Click " + e.button + " at: " + e.x + ","
+ e.y);
}
public void mouseDown(MouseEvent e) {
myLabel.setText("Button " + e.button + " Down at: " + e.x + "," + e.y);
System.out.println("Button " + e.button + " Down at: " + e.x + ","
+ e.y);
}
public void mouseUp(MouseEvent e) {
myLabel.setText("Button " + e.button + " Up at: " + e.x + "," + e.y);
System.out.println("Button " + e.button + " Up at: " + e.x + "," + e.y);
}
public void mouseMove(MouseEvent e) {
myLabel.setText("Mouse Move at: " + e.x + "," + e.y);
System.out.println("Mouse Move at: " + e.x + "," + e.y);
}
public void mouseEnter(MouseEvent e) {
myLabel.setText("Mouse Enter at: " + e.x + "," + e.y);
System.out.println("Mouse Enter at: " + e.x + "," + e.y);
}
public void mouseExit(MouseEvent e) {
myLabel.setText("Mouse Exit at: " + e.x + "," + e.y);
System.out.println("Mouse Exit at: " + e.x + "," + e.y);
}
public void mouseHover(MouseEvent e) {
myLabel.setText("Mouse Hover at: " + e.x + "," + e.y);
System.out.println("Mouse Hover at: " + e.x + "," + e.y);
}
}

MouseEventExample类实现了MouseListener、MouseMoveListener和MouseTrackListener 3个接口,并通过“shell.addMouseListener(this);”、“shell.addMouseMoveListener(this);”和“shell.addMouseTrackListener(this);”把自己作为监听器添加到了窗口中,程序运行效果如图1所示。


图1 鼠标事件实例

 

共4页  第1页 第2页 第3页 第4页


 
 
标签: SWT , 事件 , Eclipse , 开发 , 教程 , IP 打印本文
 
 
  相关资讯
RSS
 
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站