1

「mdlCategory」という名前の 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 からカテゴリを取得してカテゴリを更新しようとすると、モデルを削除して再度追加しても、適切な方法で変更されませんが、カーソルをコンボに渡すと、変更は発生しますが、持続しません。

モデルのカテゴリ オブジェクトを間違った方法で更新していますか?

4

1 に答える 1

0

モデルの変更について Swing に通知する必要があります。if-block では、mdlCategory.addElement(c); を作成します。. else-block の場合は、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);) は必要ありません

于 2013-01-21T15:50:12.600 に答える