【问题标题】:Java get changed title of a dialogJava获取更改的对话框标题
【发布时间】: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


【解决方案1】:

我认为这里的问题在于 Eclipse 中的新“对话框”实际上是一个向导。当您选择“Java 接口”(在“新建”对话框中)时,您实际上不是在另一个对话框中,而是在同一个向导中的一个页面上。此向导中的每个页面都可以有自己的标题,但在后台它是相同的底层外壳对象,这就是您不会收到更多事件的原因。

顺便说一句:在处理SWT.ActivateSWT.Deactivate 和其他类似的 shell 事件时,ShellAdapter 可能会更容易/更容易

【讨论】:

  • 你是对的。普通的无类型监听器是我学习的第一个监听器。我新发现也有特殊的听众。关于精灵的事情:你说它是同一个shell对象,但是里面有一个精灵。如何检索此向导?更改向导中的页面时会发生什么样的事件?也许我可以给它添加一个监听器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多