2013-01-21 24 views
1

我試圖用該段代碼更新名爲'mdlCategory'的DefaultComboBoxModel。正在更新Swing DefaultComboBoxModel

private void categoriesUpdate(String categoryName, boolean addElement) { 

    if (!categoryName.equals("")) { 

     if (addElement) {//that block works propertly 
      Category c = new Category(-1); 
      c.setName(categoryName); 
      mdlCategory.addElement(c); 
      selAllergenCategory.setSelectedItem(c); 
     } else {//not works!! 
      Category cat = (Category) mdlCategories.getSelectedItem(); 
      cat.setName(categoryName); 
      selAllergenCategory.setSelectedItem(cat); 
     } 
    } 
} 

當addElement爲true時,會以正確的方式將新類別添加到模型中。

我在'else'塊有問題...當嘗試更新從DefaultComboBoxModel獲取它的類別時,模型不會以正確的方式更改,即使刪除並再次添加它,雖然當我通過光標在組合中,變化發生但不會持續。

我是以錯誤的方式更新模型的類別對象嗎?

+2

爲更好地幫助更快張貼[SSCCE(HTTP:// SSCCE。 org /),簡短的,可運行的,可編譯的,只是'JFrame'帶有一個'JComboBox'和'JButton'被調用的問題,否則不知道 – mKorbel

回答

0

您應該通知Swing模型中的變化。在if塊中,它使mdlCategory.addElement(c); 。對於其他塊你應該叫setElementAt:

} else {//not works!! 
      Category cat = (Category) mdlCategories.getSelectedItem(); 
      int idx = mdlCategories.indexOf(cat); 
      cat.setName(categoryName); 
      mdlCategory.setElementAt(cat, idx); 
      selAllergenCategory.setSelectedItem(cat); 
} 

也許最後一行(selAllergenCategory.setSelectedItem(CAT);)不需要