1

我遇到了一个 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 是我的私有类,它实现了这个复杂的比较器。

4

1 回答 1

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 谢谢输入!

于 2013-10-05T14:08:13.807 回答