我陷入了SWT問題。我想推遲創建一個ViewerComparator類,直到用戶真正想從ComboViewer中選擇一個項目。在我的用例中,Comparator是一個非常複雜的野獸,它使用了大量的資源。用戶通常不需要真正打開CombiViewer,所以我想我可以通過將比較器的創建推遲到真正需要的時刻節省計算時間。打開時調用JFace ComboViewer setComparator()
這裏是我的嘗試:
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是我的私人類,它實現了這個複雜的比較器。
因此,這是不被調用的「open」方法,而不僅僅是不執行的「if」部分? – Baz
當雙擊列表中的某個條目(或根據打開的策略單擊時),會調用IOpenListener。 Combo查看器打開下拉列表時不會調用它。 –
@ greg-449,THX,我需要什麼類型的監聽器?應該有一個可以在comboviewer擴展之前使用的鉤子。 – luksch