打开时调用JFace ComboViewer setComparator()

时间:2013-10-05 11:17:04

标签: java swt listener jface

我遇到了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。

1 个答案:

答案 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输入!