我通过扩展 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/