2015-05-11 86 views
0

我已經創建了一個自定義的JComboBox,所以如果我嘗試打開我的組合框,我可以看到描述附近的檢查按鈕。還行吧。但是,如果我想選擇n個項目,我必須打開選擇列表,然後選中一個項目,重新打開選擇列表,選擇另一個項目,打開選擇列表等。 我想打開選擇列表一次然後選擇我想要的列表,而不是關閉選擇列表。這是可能的嗎?如何在JComboBox中打開菜單?

這是CheckComboStore

public class CheckComboStore 
{ 
    String id; 
    Boolean state; 
    String nomeArticolo; 

    public CheckComboStore(String id, String nomeArticolo,Boolean state) 
    { 
     this.id = id; 
     this.nomeArticolo=nomeArticolo; 
     this.state = state; 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public Boolean getState() { 
     return state; 
    } 

    public void setState(Boolean state) { 
     this.state = state; 
    } 

    public String getNomeArticolo() { 
     return nomeArticolo; 
    } 

    public void setNomeArticolo(String nomeArticolo) { 
     this.nomeArticolo = nomeArticolo; 
    }   
} 

這是創建複選按鈕的組合框

List<Articoli> listaArticoli = modelManager.getArticoliManager().estraiArticoli(false,false,false,false,false); 
     CheckComboStore[] stores = new CheckComboStore[listaArticoli.size()]; 
     int i=0; 
     for(Iterator<Articoli>it=listaArticoli.iterator(); it.hasNext();){ 
      Articoli art = it.next(); 
      stores[i] = new CheckComboStore(art.getCodArticoloString(),art.getNomeArticolo(),false); 
      i++; 
     } 
    comboBoxArticoli = new ComboFormat(stores); 
    comboBoxArticoli.setRenderer(new CheckComboRenderer()); 
+0

不確定你在問什麼......你想在JComboBox中選擇多個項目嗎? [JList](http://docs.oracle.com/javase/7/docs/api/javax/swing/JList.html)會更合適嗎? – copeg

回答

1

可能是你可以嘗試添加一個監聽器如下圖所示,當選擇一個項目的代碼您可以使用invokeLater並保持彈出窗口打開。這可能不是確切的解決方案,但會給你一個想法。請讓我知道這對你有沒有用?

combo.addItemListener(new ItemListener() { 

     @Override 
     public void itemStateChanged(ItemEvent e) { 
     if (e.getStateChange() == ItemEvent.SELECTED) { 
      if (e.getItem() == combo.getItemAt(0)) //some condition { 

      SwingUtilities.invokeLater(new Runnable() { 

       @Override 
       public void run() { 
       combo.setSelectedItem(lastSelectedItem); 
       combo.showPopup(); 
       } 
      }); 
      } else { 
      lastSelectedItem = combo.getSelectedItem(); 
      } 
     } 
     } 
    }); 
+0

感謝您的回覆,但無效。如果我嘗試附加這個,comboBoxArticoli爲null,我試着把comboBoxArticoli代替combo在你的代碼中,但是我從comboBoxArticoli.getSelectedItem()得到了空值 – bircastri

+0

如果你在'getSelectedItem()'中獲得null,那麼它表示沒有選擇項目。你能否驗證組合選定的索引? –

+0

我認爲問題是調試器,因爲如果我刪除SwingUtilities.invokeLater ...代碼不爲空。然後我改變了這段代碼,我已經刪除了這個條件,並且只放了combo.showPopup,現在可以工作了。 此致敬禮 – bircastri