前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【SWT】常用代码(二)

【SWT】常用代码(二)

作者头像
为了伟大的房产事业
发布2024-03-15 13:11:55
750
发布2024-03-15 13:11:55
举报
文章被收录于专栏:Java崽Java崽

 前言:窗口事件

很多桌面应用程序与用户的交互都是通过事件机制来实现的,如鼠标键或键盘被按下或 者释放。事件通过监听器通知应用程序哪个部件发生了什么动作,然后作出相应的反应。 org.eclipse.swt.events 包中包含了所有的 SWT 专用的事件类和监听器的接口。本章主要介绍 了如何使用基本类型和无类型的事件,并通过两个典型的事件键盘事件、鼠标按键事件作进 一步说明。

一:监听器

其实 SWT 中处理事件与 Java 的 AWT 事件类似,对于每种事件有与之对应的 Listener 类,如果一个事件为 X,那么对应的监听器(Listener)类就是 XListener,它的添加监听方法 为 addXListener,关于监听器的使用请看下面实例代码。

代码语言:javascript
复制
package event; 
import org.eclipse.swt.widgets.*; 
import org.eclipse.swt.*; 
import org.eclipse.swt.events.*; 
import org.eclipse.jface.dialogs.*; 
public class ListenerExample { 
 public static void main(String[] args) { 
 final Display display = Display.getDefault(); 
 final Shell shell = new Shell(); 
 shell.setSize(200, 120); 
 shell.setText("监听器事例"); 
Button button = new Button(shell, SWT.PUSH); 
 button.setBounds(30, 25, 120, 25); 
 button.setText("确定"); 
 button.addSelectionListener(new SelectionListener() { 
 public void widgetSelected(SelectionEvent e) { 
 MessageDialog.openInformation(shell, null, "HelloWorld!!"); 
 } 
 public void widgetDefaultSelected(SelectionEvent e) { 
 } 
 }); 
 shell.open(); 
 shell.layout(); 
 while (!shell.isDisposed()) { 
 if (!display.readAndDispatch()) 
 display.sleep(); 
 } 
 } 
}

运行效果

 实例:

SelectionEvent 事件当某个 GUI 元素被选中时发生,这里定义一个按钮对象,当单击“确 定 ” 按 钮 时 触 发 此 事 件 。 其 实 按 钮 对 象 通 过 addSelectionListener() 方 法 添 加 了 一 个 SelectionListener 对象。当触发此按钮时,将调用监听器的 widgetSelected()方法,此时 SelectionListener 对象(这里定义为 new SelectionListener())将事件作为该方法的参数传入。

代码语言:javascript
复制
button.addSelectionListener(new SelectionAdapter() { 
 public void widgetSelected(SelectionEvent e) { 
 MessageDialog.openInformation(shell, null, "HelloWorld!!"); 
 } 
});

SWT窗口组件与SWT世间对应表:

二:无类型事件 

SWT 提供了无类型(UnType)监听器,它通过调用它的 handleEvent()方法来获知事件 (HandleEvent()为 Listener 类的方法),该方法能够处理任何的事件。用 addListener (int eventType, Listener listener)增加一个监听器到一个监听器集合,当触发了指定类型的事件时, 监听器通过 handleEvent()来获知事件。

 三:键盘鼠标事件

在本节中介绍键盘事件(KeyEvent),当键被按下或释放时触发键盘事件。SWT 提供的 键盘事件如表所示。

KeyEvent 包含 4 个属性,分别为 character、doit、keyCode 和 stateMask,这 4 个属性的 意义分别如表所示。

这里需要进一步说明的是 keyCode 和 stateMask 属性。keyCode 表示键的代码,键与键码的对 应关系见表所示。

键盘事件 

键盘事件采用了无类型事件方式实现。用 stateMask 与 ALT、SHIFT、CTRL 键的键码按 位进行与运算,如果得到的结果等于 0,则说明这些键被按下。当同时按下 SHIFT 键和 X 键 时,控制台将输出“SHIFT+X”;当按下任意字母键时,程序将执行 string+=event.character 语句把该键的字符输出,如果按“A”键则输出“a”;如果按下的 键为“Backspace”键,则由控制台输出“Backspace”,这是因为通 过 event.keyCode 来获取按键的键码实现分支语句的执行。

对 KeyEvent 的 character、keyCode 和 stateMask 属性讨论后, 下面来看以下 doit 属性。doit 用来表示操作是否被允许,当为 false 时操作被取消,定制一个实例通过将 doit 属性值设置为 false,来阻 止键盘往文本框输入数据信息。

实例:
代码语言:javascript
复制
package event; 
import org.eclipse.swt.widgets.*; 
import org.eclipse.swt.*; 
import org.eclipse.swt.events.*; 
public class KeyEventExample2 { 
 private Text text; 
 public KeyEventExample2() { 
 final Display display = Display.getDefault(); 
 final Shell shell = new Shell(); 
 shell.setSize(240, 155); 
 shell.setText("CancelKeyInput"); 
 text = new Text(shell, SWT.BORDER); 
 text.setBounds(5, 5, 220, 80); 
 Button button = new Button(shell, SWT.PUSH); 
 button.setBounds(5, 90, 100, 25); 
 button.setText("CancelKeyInput"); 
 button.addSelectionListener(new SelectionAdapter() { 
 public void widgetSelected(SelectionEvent e) { 
 cancelKeyInput(); 
 } 
 }); 
 shell.open(); 
 shell.layout(); 
 while (!shell.isDisposed()) { 
 if (!display.readAndDispatch()) 
 display.sleep(); 
 } 
 } 
 public void cancelKeyInput() { 
 text.addKeyListener(new KeyAdapter() { 
 public void keyPressed(KeyEvent e) { 
 e.doit = false; 
 } 
}); 
 } 
 public static void main(String[] args) { 
 new KeyEventExample2(); 
 } 
} 
鼠标事件

鼠标事件操作包括:鼠标键的按下、释放、双击和鼠标光标在 GUI 上移动或位于其上方 而触发。

实例 

stateMask 检测键盘按键 Alt、Shift、Ctrl 键和鼠标键 Button1、Button2、Button3(左、 中、右)是否同时按下,下面代码实现了鼠标事件触发时的状态(源代码对应光盘上 “MouseEventExample.java”文件):

代码语言:javascript
复制
package event; 
import org.eclipse.swt.*; 
import org.eclipse.swt.widgets.*; 
public class MouseEventExample { 
 public MouseEventExample() { 
 final Display display = Display.getDefault(); 
 final Shell shell = new Shell(); 
 shell.setSize(500, 375); 
 shell.setText("MouseEvent 实例"); 
 Listener listener = new Listener() { 
 public void handleEvent(Event e) { 
 String string = ""; 
 switch (e.type) { 
 case SWT.MouseDown: 
 string += "DOWN"; 
 break; 
 case SWT.MouseUp: 
 string += "UP"; 
 break; 
 case SWT.MouseMove: 
 string += "MOVE"; 
 break; 
 case SWT.MouseDoubleClick: 
 string += "DOUBLE"; 
 break; 
 case SWT.MouseEnter: 
 string += "ENTER"; 
 break; 
 case SWT.MouseExit: 
 string += "EXIT"; 
 break; 
 case SWT.MouseHover: 
 string += "HOVER"; 
 break; 
 } 
 if ((e.stateMask & SWT.BUTTON1) != 0) 
 string += " BUTTON1"; 
 if ((e.stateMask & SWT.BUTTON2) != 0)
string += " BUTTON2"; 
 if ((e.stateMask & SWT.BUTTON3) != 0) 
 string += " BUTTON3"; 
 if ((e.stateMask & SWT.ALT) != 0) 
 string += " ALT"; 
 if ((e.stateMask & SWT.SHIFT) != 0) 
 string += " SHIFT"; 
 string += ", x=" + e.x + ", y=" + e.y; 
 System.out.println(string); 
 } 
 }; 
 shell.addListener(SWT.MouseDown, listener); 
 shell.addListener(SWT.MouseUp, listener); 
 shell.addListener(SWT.MouseDoubleClick, listener); 
 shell.addListener(SWT.MouseMove, listener); 
 shell.addListener(SWT.MouseEnter, listener); 
 shell.addListener(SWT.MouseExit, listener); 
 shell.addListener(SWT.MouseHover, listener); 
 shell.open(); 
 shell.layout(); 
 while (!shell.isDisposed()) { 
 if (!display.readAndDispatch()) 
 display.sleep(); 
 } 
 } 
 public static void main(String[] args) { 
 new MouseEventExample(); 
 } 
} 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  •  前言:窗口事件
  • 一:监听器
    •  实例:
      • SWT窗口组件与SWT世间对应表:
        • 键盘事件 
        • 鼠标事件
    • 二:无类型事件 
    •  三:键盘鼠标事件
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档