我遇到了SWT问题。我想将ViewerComparator类的创建推迟到用户实际想要从ComboViewer中选择项目的位置。在我的用例中,Comparator是一个非常复杂的野兽,它使用了大量资源。用户通常不需要实际打开CombiViewer,因此我认为通过将比较器的创建推迟到真正需要的时刻,我可以节省计算时间。
以下是我的尝试:
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是我的私有类,它实现了这个复杂的Comparator。
答案 0 :(得分:0)
如果解决问题,回答自己的问题的好传统,我把解决方案放在这里:
comboViewer1.getControl().addListener(SWT.MouseEnter, new Listener(){
@Override
public void handleEvent(Event event) {
if (comboViewer1.getComparator() == null){
comboViewer1.setComparator(new ViewerComp(transientModelThing.getComRef()));
}
}
});
我现在使用SWT.MouseEnter
事件。这当然不是我想要的,但它足够接近。
@ greg-449 Thx输入!