要对一个shell设置快捷键添加监听器事件时,直接在shell上添加一个监听器的方法行不通。如以下方法:
addKeyListener(new KeyAdapter() {
public void keyPressed(final KeyEvent e) {
System.out.println(e.keyCode);
MessageDialog.openInformation(null, e.keyCode+"", e.keyCode+"");
}
});
这种方法在shell上注册的监听器没有用。不知道是为什么。。。
swt中设置快捷键,多个页面中(如view上有一个dialog),另一种可行方法是:
- 添加一个监听器
listener=new Listener(){
public void handleEvent(Event e) {
// TODO Auto-generated method stub
String tName=Field.getName();
Long tKey=Field.Getlong();
if(tName.equals("showmessages")&& tKey==LngKey ){
if(e.keyCode==27){
shell.dispose();
}else if (e.keyCode==16777221) {
revealImage.setLarge();
}else if (e.keyCode==16777222) {
revealImage.setSmall();
}else if(e.keyCode==47 || e.keyCode==16777263){
revealImage.setReverse();
}else {
}
}
}
};
2.给容器注册监听器
composite.getDisplay().addFilter(SWT.KeyDown, listener);
3. 并且在shell关闭时删除监听器
shell = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
shell.addShellListener(new ShellAdapter() {
public void shellClosed(final ShellEvent e) {
System.out.println("MessageQuery");
getParent().getDisplay().removeFilter(SWT.KeyDown, listener);
Field.setName("MessageQuery");
}
});
这里的移除监听器很重要,不然在一个view上打开的dialog中的注册的监听器还会是之前注册的,但是状态是dispose了。
这里的处理办法是:首先在view初始化的时候在Field类(Field随应用程序一直存在)中存一个格strName和longKey,用于区别注册的监听器属于哪一个shell,并且由于第一次再次打开shell时都会重新注册监听器,所以这里要加一个longKey来标记是新打开的一个shell。因为已经关闭了的shell的状态是dispose,其中的对象也会dispose了,所以不能用dispose了的对象。但是dispose了的对象还会留在内存中。
这种方法虽然是解决了需求,但是显得有些繁琐,还得寻找更加简单的方法。。。。
分享到:
相关推荐
在实现过程中,开发者可能会遇到一些挑战,例如不同操作系统上的兼容性问题、UI布局的调整以及性能优化等。SWT虽然能提供原生的用户体验,但其跨平台支持相比Java Swing来说可能稍显不足,需要根据目标平台进行适配...
SWT(Standard Widget Toolkit)是Eclipse开源组织提供的一款用于创建Java图形用户界面(GUI)的库,它为开发者提供了丰富的控件和组件,使得在Java中构建美观、高效的桌面应用变得可能。在这个名为"四则运算计算器...
- **Layout**: Layout管理器负责控制Composite中的子Widget如何在界面上排列和布局,例如填充、网格、单列等布局方式。 2. **SWT的主要组件**: - **Button**: 用于创建按钮,如`PushButton`和`ToggleButton`。 ...
在SWT中,我们可以使用`Display`类来创建一个新的窗口,`Shell`类表示窗口本身,而`Composite`类用于组合和管理控件。为了实现截图,我们需要以下关键步骤: 1. **捕获屏幕**:SWT不直接提供屏幕捕获功能,但可以...
3. **编写使用SWT的代码**:在项目中创建一个新的Java类,并在其中编写使用SWT的代码。常见的SWT组件包括`Shell`, `Button`, `Label`等,这些组件可以通过`org.eclipse.swt.widgets`包访问。 4. **运行应用程序**:...
JFace是建立在SWT之上的高级抽象层,它旨在简化UI编程,减少代码量,并提供数据绑定功能。通过JFace,开发者可以更专注于业务逻辑,而不是底层的GUI细节。书中将阐述JFace的核心概念,如视图、对话框、表单和事件...
.2.1.4 在不同的语言中切换 15 2.2 直接获取SWT工具包 16 2.3 下载和安装Visual Editor 17 2.3.1 Visual Editor的下载 17 2.3.2 Visual Editor的安装 18 2.4 第一个SWT程序 19 2.4.1 创建SWT程序 19 ...
功能添加: ·将开始/暂停监控的快捷键更改为Ctrl+Z ·支持容器内部控件的拖拽(按住Ctrl键) ·支持拖拽容器时移动整个Shell(在空白处) ·拖拽时鼠标变成小手形状 ·添加exit.confirm属性用...
在本文中,我们将深入探讨SWT(Standard Widget Toolkit)和JFace中的Menu与Bar的实现,以及如何在Java应用程序中使用它们。SWT是Eclipse项目的一个组成部分,提供了一组原生的GUI控件,使得开发者可以创建与操作...
- 在SWT中,开发者可以通过设置上下文菜单来为容器增加额外的功能,比如添加剪切、复制、粘贴等操作。 **5.5 容器颜色、背景和鼠标指针设置** - 开发者可以自定义容器的颜色、背景和鼠标指针,以提升用户体验。 **...
·将开始/暂停监控的快捷键更改为Ctrl+Z ·支持容器内部控件的拖拽(按住Ctrl键) ·支持拖拽容器时移动整个Shell(在空白处) ·拖拽时鼠标变成小手形状 ·添加exit.confirm属性用以判断是否...
5.3 在MyEclipse中设置JUnit 71 5.4 JUnit测试 72 5.4.1 JUnit测试用例 72 5.4.2 JUnit测试套件 75 5.5 JUnit应用实例:数据库程序单元测试 77 5.6 本章小结 80 第6章 Java Web应用程序的开发 81 6.1 Java Web应用...
2. 创建Shell对象作为程序的主要窗口,设置其标题和大小。 3. 设置窗口布局,这里使用了FillLayout,使窗口内容自动填充整个空间。 4. 添加Label控件显示文本"Hello World"。 **五、实验总结与体会** 通过本次实验...
1. **JFace简介**:JFace是Eclipse RCP(Rich Client Platform)中的一个关键组件,它建立在SWT(Standard Widget Toolkit)之上,提供了一层抽象,简化了UI开发。JFace提供了一些核心服务,如数据绑定、事件处理、...
- JFace是在SWT之上的抽象层,简化了UI开发,提供了数据绑定和事件处理等功能。 3. **第4章 使用基本控件与对话框**: - 学习如何创建和使用SWT的基本控件,如按钮、文本框、列表和树等。 - 掌握对话框的使用,...
Gladiator(Glimmer编辑器的缩写)是一个正在进行的开发中的示例beta项目,该项目演示了如何使用 (JRuby桌面开发GUI库)在Ruby中构建文本编辑器。 无论如何,它都不打算成为成熟的编辑器,而主要是使用进行的有趣...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...