我陷入了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不太熟悉。但是在调试器中,我看到从未调用过这种打开方法。我希望在用户尝试折叠组合框时调用它。
为什么听众不工作没有想法?我注册的postSelectionListener以相同的方式完美地运行。 comboViewer1和transientModelThing是公共全局变量。 ViewerComp是实现此复杂Comparator的我的私有类。
最佳答案
按照回答自己的问题是否解决的良好传统,我将解决方案放在这里:
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输入!