首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

14.2  鼠 标 事 件

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

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

14.2.1  MouseListener接口

在SWT中,通过实现MouseListener接口来响应鼠标的按下、松开及双击事件,Mouse- Listener接口如例程14-1所示。

例程14-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,表示鼠标左键按下,按钮值对应鼠标按钮如表14-1所示。

表14-1  鼠标按钮对应值

鼠 标 按 钮

鼠标左键

1

鼠标中键

2

鼠标右键

3

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

14.2.2  MouseMoveListener接口

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

例程14-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方法,用来响应窗口中鼠标移动事件。

14.2.3  MouseTrackListener接口

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

例程14-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表示鼠标停放在窗口上事件的响应方法。

14.2.4  鼠标事件实例

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

例程14-4  MouseEventExample.java

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);”把自己作为监听器添加到了窗口中,程序运行效果如图14-1所示。

图14-1  鼠标事件实例

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论