swt - RCP 覆盖未调用复合处理方法

标签 swt eclipse-rcp rcp

我通过扩展 e4 应用程序中的 Composite 类创建了自己的复合组合。

然后我重写了 dispose 方法,但它从未被调用过。但是,如果我在我的复合组合或它包含监听器的任何小部件上添加一个处理监听器,就会被调用。

有人可以解释我的原因吗?

这是一个例子。

public class MyComposite extends Composite{
public MyComposite(){
    this.addDisposeListener(new DisposeListener(){

        @Override
        public void widgetDisposed(DisposeEvent e) {
            System.out.println("This get printed");
        }
    });
}

@Override
public void dispose(){
    System.out.println("This is not printed");
    super.dispose();
}
}

我已经阅读了 dispose 方法的 javadoc,它说:

注意:此方法不会在接收者的后代上递归调用。这意味着,小部件实现者无法通过重新实现此方法来检测何时处理小部件,而是应该监听 Dispose 事件。

对于我看到的行为和上面的 javadoc,似乎无法覆盖 dispose 方法,因为它被忽略了。这种解释正确吗?

最佳答案

For the behaviour i am seeing and the javadoc above, seems that the dispose method can not be override because it is ignored. Is this interpretation correct?

“不能被覆盖”太强了,因为从技术上讲你可以覆盖它,但基本上你是对的。如您所见,覆盖它不会产生预期的效果。

要处理 Composite 中的处置,DisposeListener 是正确的方法。另见这个问题:Eclipse RCP: How and when to correctly unsubscribe a Composite from EventBroker?

关于swt - RCP 覆盖未调用复合处理方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32855405/

相关文章:

java - SWT 中的无效线程访问(进度条帮助)

java - 如何在 swt 工具提示上隐藏程序名称

java - SWT - TreeViewer - 单选与多选

eclipse-plugin - 如何在 Eclipse RCP 中使用 log4j?

java - ScrolledComposite 不会显示在 TabFolder 中

java - 将 GUI 置于单独的进程中

java - 我可以使用 org.eclipse.core.variables... 来定义其他扩展的属性吗

java - 如何从 Eclipse RCP 应用程序中的代码更新 View

java - 如何将已处理的工具项放置在右侧

java - 带装饰器的 RCP 图标在 macOS 上具有黑色背景