2011-11-24 25 views
0

我需要我的組合框具有組織的簡稱。問題是我可以在下拉列表中看到組織名稱,但不能實際選擇它。我的錯誤在哪裏?Java swing:爲JComboBox實現我的Comboboxmodel

public class ToComboBoxModel extends AbstractListModel implements ComboBoxModel { 
     private String selectedItem; 

     private List<Organization> orgs; 

     public ToComboBoxModel(List orgs) { 
     this.orgs = orgs; 
     } 

     @Override 
     public String getSelectedItem() { 

     return selectedItem; 
     } 

     @Override 
     public void setSelectedItem(Object newValue) { 
      for (Organization o: orgs){ 
       if (newValue==o){ 
        selectedItem=o.getShortName(); 
        break; 
       } 
      } 
     } 

     @Override 
     public int getSize() { 
     return orgs.size(); 
     } 

     @Override 
     public String getElementAt(int i) { 
     return orgs.get(i).getShortName(); 
     } 
    } 

設置模式:

query =session.createQuery("from Organization where isMain = 0"); 
List orgs=query.list(); 
toComboBox.setModel(new ToComboBoxModel(orgs)); 

提前感謝!

回答

5

我懷疑這是你的setSelectedItem()方法使用==而不是.equals()

考慮使用DefaultComboBoxModel已實現有用的方法進行比較的對象。

編輯: 此外,根據文檔,你應該呼籲所有註冊ListDataListener對象時的setSelected被調用。

使用DefaultComboBoxModel相當簡單。您創建一個新的DefaultComboBoxModel添加您希望它包含的元素,然後調用getSelectedItem()來檢索當前選定的元素。

+0

感謝您的回答。我用equals(),問題依然存在。你能否提供一個DefaultComboBoxModel的例子?我認爲我的代碼中的問題不是我擴展的東西。 – bunnyjesse112

+0

@ bunnyjesse112已編輯答案 – Jim

+0

嗨,吉姆,非常感謝您的幫助! – bunnyjesse112