我陷入了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输入!

10-07 18:48