gpt4 book ai didi

java - 打开时调用 JFace ComboViewer setComparator()

转载 作者:行者123 更新时间:2023-12-01 04:18:42 25 4
gpt4 key购买 nike

我遇到了 SWT 问题。我想推迟 ViewerComparator 类的创建,直到用户真正想要从 ComboViewer 中选择一个项目。在我的用例中,比较器是一个非常复杂的野兽,使用大量资源。用户通常不需要实际打开 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 是公共(public)全局变量。 ViewerComp 是我的私有(private)类,它实现了这个复杂的比较器。

最佳答案

秉承在问题得到解决后回答自己的问题的良好传统,我在这里提出了我的解决方案:

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

关于java - 打开时调用 JFace ComboViewer setComparator(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19197176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com