Observable
जावा में कार्यान्वयन का शायद ही कभी उपयोग किया जाता है, और स्विंग के साथ अच्छी तरह से संचालन नहीं करता है। इसके बजाय EventListener
का उपयोग करें।
विशेष रूप से, AbstractListModel
का विस्तार न करने का कोई कारण नहीं है या "जीयूआई में कहीं और" सूची की सामग्री का प्रबंधन करते समय सीधे DefaultListModel
का उपयोग करें? फिर आपका कॉम्बो बॉक्स ComboBoxModel
का उपयोग कर सकता है जो कि ListModel
उदाहरण के लिए प्रतिनिधि करता है, चयन स्थिति को ट्रैक करने के लिए अपना स्वयं का कार्यान्वयन जोड़ता है।
मैं इस तरह मन कुछ में है (लेकिन मैं यह परीक्षण नहीं किया है):
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); }
}
आप एक JComboBox की चर्चा करते हुए कर रहे हैं? यदि ऐसा है, तो मैं कॉम्बोबॉक्स मॉडेल और इसके कार्यान्वयन में देखता हूं। – Avrom