Java의 Observable
구현은 거의 사용되지 않으며 Swing과 잘 작동하지 않습니다. 대신 EventListener
을 사용하십시오.
특히 GUI의 다른 곳에서 목록의 내용을 관리 할 때 AbstractListModel
을 확장하지 않거나 DefaultListModel
을 직접 사용하지 않는 이유가 있습니까? 그런 다음 콤보 상자에서 동일한 ListModel
인스턴스에 위임하는 ComboBoxModel
을 사용하여 자체 구현을 추가하여 선택 상태를 추적 할 수 있습니다.
는이 같은 마음 뭔가있다 (하지만 난 그것을 테스트하지 않은)에 의해 정의 된
final class MyComboBoxModel
extends AbstractListModel
implements ComboBoxModel
{
private final ListModel data;
private volatile Object selection;
MyComboBoxModel(ListModel data) {
/*
* Construct this object with a reference to your list,
* which contents are managed somewhere else in the UI.
*/
this.data = data;
data.addListDataListener(new ListDataListener() {
public void contentsChanged(ListDataEvent evt) {
fireContentsChanged(this, evt.getIndex0(), evt.getIndex1());
}
public void intervalAdded(ListDataEvent evt) {
fireContentsChanged(this, evt.getIndex0(), evt.getIndex1());
}
public void intervalRemoved(ListDataEvent evt) {
fireContentsChanged(this, evt.getIndex0(), evt.getIndex1());
}
});
}
public void setSelectedItem(Object selection) {
this.selection = selection;
fireContentsChanged(this, 0, data.getSize() - 1);
}
public Object getSelectedItem() { return selection; }
public int getSize() { return data.getSize(); }
public Object getElementAt(int idx) { return data.getElementAt(idx); }
}
glazed Lists 당신이 JComboBox를 참조하고 체크 아웃? 그렇다면 ComboBoxModel 및 해당 구현을 살펴볼 것입니다. – Avrom