Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java获取更改的对话框标题_Java_Eclipse_Shell_Swt_Title - Fatal编程技术网

Java获取更改的对话框标题

Java获取更改的对话框标题,java,eclipse,shell,swt,title,Java,Eclipse,Shell,Swt,Title,我试图捕获SWT事件,比如Eclipse中的SWT.activate、SWT.deactivate和SWT.dispose。所以,我可以看到哪个对话框被打开或激活,哪个被关闭,哪个被停用。如果捕获到事件,我将提取Shell对象并使用Shell.getText()提取其标题。为了侦听事件,我使用了一个非类型化的侦听器(已编辑): 如果在Eclipse中,我打开了“New”,并且上面的侦听器正确地将“New”显示为激活的对话框。但是如果我在“新建”对话框中选择“Java接口”,那么我将进入一个名为“

我试图捕获SWT事件,比如Eclipse中的SWT.activate、SWT.deactivate和SWT.dispose。所以,我可以看到哪个对话框被打开或激活,哪个被关闭,哪个被停用。如果捕获到事件,我将提取Shell对象并使用
Shell.getText()
提取其标题。为了侦听事件,我使用了一个非类型化的侦听器(已编辑):


如果在Eclipse中,我打开了“New”,并且上面的侦听器正确地将“New”显示为激活的对话框。但是如果我在“新建”对话框中选择“Java接口”,那么我将进入一个名为“新建Java接口”的对话框。但是我的
handleEvent
方法没有被激发,因此我无法提取新的对话框标题。我的问题是:当我在一个Eclipse对话框中,点击其中的某个东西,然后进入另一个对话框(有一个新标题)时,调用了什么样的事件或发生了什么事情?

我认为这里的问题来自这样一个事实:Eclipse中的新“对话框”实际上是一个向导。当您选择“Java接口”(在“新建”对话框中)时,您实际上不是在另一个对话框中登录,而是在同一向导中的页面上登录此向导中的每个页面都可以有自己的标题,但在场景后面是相同的底层shell对象,这就是为什么您不会收到进一步的事件


顺便说一下:当使用
SWT.Activate
SWT.Deactivate
和其他类似的shell事件时,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对象及其文本。但正如上面的例子所述,如果对话框中的标题发生了更改,则不会引发任何事件(或者我遗漏了一些内容)。编辑您的帖子在帖子中添加此代码。好的,我做到了。我添加了代码块,这样每个人都可以看到我的更多代码。很遗憾,我不能发布我的全部代码,因为这是不允许的。你说得对。正常的非类型听众是我学习的第一批听众。我最近发现也有特别的听众。关于向导的事情:您说过它是同一个shell对象,但是其中有一个向导。如何检索此向导?当向导中的页面发生更改时,会发生什么样的事件?也许我可以给它添加一个侦听器。
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'
            }
        }
    }
};