独自の ComboBoxModel を実装しました:
public class MyComboBoxModel extends AbstractListModel<MyType>
implements ComboBoxModel<MyType> {}
明らかにオーバーライドする必要がありますpublic void setSelectedItem(Object item)
が、ドキュメントには次のように記載されています。
このメソッドの実装は
ListDataListeners
、内容が変更されたことをすべての登録済みに通知する必要があります。
そのためには、メソッドを使用する必要があると思いますAbstractListModel.fireContentsChanged(Object, int, int)
。問題JComboBox
は、リストになくても選択した項目を設定できるため、setSelectedItem(Object)
が呼び出されたときに、問題の項目のインデックスを必ずしも決定できないことです。これは、基になるモデルにある必要がないためです。
この場合に使用する別の質問 ( https://stackoverflow.com/a/7077192fireContentsChanged(item, -1, -1)
) への回答を見つけましたが、その人はコードのその部分の詳細を提供しませんでした。今、私は、これが変更された選択されたアイテムを処理する正しい方法であったかどうか疑問に思っています?
常に両方のインデックスとして -1 を使用する必要がありますか? 実際にモデル内にある場合、アイテムの実際のインデックスを取得しようとする必要がありますか? それとも、まったく別のことをする必要がありますか?