我正在尝试捕获SWT事件,例如Eclipse中的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中我打开'New'并且上面的监听器正确显示'New'作为激活对话框。但是如果我在'New'对话框中选择'Java Interface',那么我将登陆一个名为'New Java Interface'的对话框。但是我的handleEvent
方法没有被触发,因此我无法提取新的对话框标题。我的问题是:当我在Eclipse对话框中并单击其中的某些内容时,我会调用什么样的事件或发生什么事情会导致我进入另一个对话框(带有新标题)?
答案 0 :(得分:1)
我认为这里的问题来自于Eclipse中的新'对话'实际上是向导。当您选择“Java界面”(在“新建”对话框中)时,实际上您不会在另一个对话框中登陆,而是在同一向导中的页面上登陆。此向导中的每个页面都可以拥有自己的标题,但在场景后面它是相同的底层shell对象,这就是您不再接收其他事件的原因。
顺便说一句:在使用SWT.Activate
,SWT.Deactivate
和其他类似的shell事件时,对{a ShellAdapter