2012-04-26 87 views
2

我設法按照下面列出的代碼在IToolBarManager上添加組合框。現在有沒有人知道如何從oustide範圍內訪問在IContributionItem中創建的組合框?如何訪問IContributionItem的組合框

親切的問候, 基里亞科斯

IToolBarManager mgr = this.getViewSite().getActionBars().getToolBarManager(); 
IContributionItem comboCI = new ControlContribution("test") { 
    protected Control createControl(Composite parent) { 

     final Combo c = new Combo(parent, SWT.READ_ONLY); 
     c.add("one"); 
     c.add("two"); 
     c.add("three"); 
     c.addSelectionListener(new SelectionAdapter() { 
      public void widgetSelected(SelectionEvent e) { 
       c.add("four"); 
       } 
       }); 
     return c; 
    } 
};   

mgr.add(comboCI); 
+0

你到底想幹什麼?您已經有一個偵聽器,可以用來溝通當前值與「外部」... – 2012-04-26 17:41:39

+0

我試圖改變組合框的值,當其他事件被觸發時,所以我需要訪問外部的組合框宣佈的範圍。 – Kyriakos 2012-04-27 08:29:26

+0

組合本身被找到爲'SelectionEvent'的'item'成員變量... – 2012-04-27 11:23:43

回答

4

將ControlContribution類或IContributionItem界面中組合變量並創建一個get方法。

class ControlContribution implements IContributionItem { 

    protected Combo combo; 

    public Combo getCombo(){ 
     return combo; 
    } 
} 

這樣,你不需要在匿名類中聲明它。

IContributionItem comboCI = new ControlContribution("test") { 
protected Control createControl(Composite parent) { 

    combo = new Combo(parent, SWT.READ_ONLY); 
    combo.add("one"); 
    combo.add("two"); 
    combo.add("three"); 
    combo.addSelectionListener(new SelectionAdapter() { 
     public void widgetSelected(SelectionEvent e) { 
      combo.add("four"); 
      } 
      }); 
    return combo; 
} 
}; 

你可以叫

comboCI.getCombo(); 

顯然,IContributionItem接口需要有getCombo()方法

+0

嗨Elias,謝謝你的回覆。我已經嘗試過,但是當我試圖訪問get方法時:levelsCombo = comboCI.getlevelsCombo();我得到get方法是未定義的。 – Kyriakos 2012-04-27 08:45:22