【发布时间】:2014-06-08 13:03:17
【问题描述】:
我正在尝试在 Eclipse 中捕获 SWT 事件,例如 SWT.activate、SWT.deactivate 和 SWT.dispose。所以,我可以看到哪个对话框被打开或激活,哪个被关闭,哪个被停用。如果事件被捕获,我提取 Shell 对象并使用shell.getText() 提取其标题。为了监听事件,我使用了一个无类型的监听器(已编辑):
PlatformUI.getWorkbench().getDisplay().addFilter(SWT.Activate, shellListener);
Listener shellListener = new Listener(){
@Override public void handleEvent(Event e) {
if (event.widget.getClass() == org.eclipse.swt.widgets.Shell.class){
Shell shell = (Shell) e.widget;
String shellTitle = shell.getText();
if (event.type == Activate) {
String message = "The following dialog was activated: " + shellTitle;
// do other stuff with 'message'
}
}
}
};
如果在 Eclipse 中打开“新建”并且上面的侦听器正确地将“新建”显示为已激活的对话框。但是,如果我在“新建”对话框中选择“Java 接口”,那么我将进入一个名为“新建 Java 接口”的对话框。但是我的handleEvent 方法没有被触发,因此我无法提取新的对话框标题。我的问题是:当我在 Eclipse 对话框中并单击其中的某些内容会导致我进入另一个对话框(带有新标题)时,调用了哪种事件或发生了什么?
【问题讨论】:
-
Eclipse 对话框使用 SWT shell 并触发通常的 shell 事件。你是如何设置监听器的?
-
我正在写
PlatformUI.getWorkbench().getDisplay().addFilter(SWT.Activate, shellListener),而shellListener 类似于Listener shellListener = new Listener(){ @Override public void handleEvent(Event e) {//do stuff}};在do stuff 块中,我正在获取Shell 对象及其文本。但如上例所述,如果标题在对话框中更改,则不会引发任何事件(或者我遗漏了某些内容)。 -
编辑您的帖子在帖子中添加此代码。
-
好的,我做到了。我添加了代码块,以便每个人都可以看到更多我的代码。不幸的是,我不能发布我的整个代码,因为它是不允许的。
标签: java eclipse shell swt title