私は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 は問題なく機能します。omboViewer1 と transientModelThing はパブリック グローバルです。ViewerComp は、この複雑な Comparator を実装するプライベート クラスです。