我遇到了一个 SWT 问题。我想将 ViewerComparator 类的创建推迟到用户实际想要从 ComboViewer 中选择一个项目的时候。在我的用例中,比较器是一个使用大量资源的非常复杂的野兽。用户通常不需要实际打开 CombiViewer,所以我认为可以通过将 Comparator 的创建推迟到真正需要它的时刻来节省计算时间。
这是我尝试过的:
comboViewer1.addOpenListener(new IOpenListener(){
@Override
public void open(OpenEvent event) {
if (comboViewer1.getComparator() == null){
comboViewer1.setComparator(new ViewerComp(transientModelThing.getComRef()));
}
}
});
我对 SWT 和 JFace 不是很熟悉。但是在调试器中,我看到这个 open 方法永远不会被调用。我希望在用户尝试折叠组合框时调用它。
不知道为什么听众不工作?我以几乎相同的方式注册的 postSelectionListener 完美运行。comboViewer1 和 transientModelThing 是公共全局变量。ViewerComp 是我的私有类,它实现了这个复杂的比较器。