I want a javax.swing.ListModel
be shared among multiple javax.swing.ComboBoxModel
s.
With the following code , when I select an item from the JComboBox
,in a running program through the view, the JComboBox
always shows the first item as selected.
public class DelegatedComboBoxModel<T> extends AbstractListModel<T> implements
ComboBoxModel<T> {
protected ListModel<T> listModel;
protected Object selectedObject;
ListDataListener listDataChangeDelegater = new ListDataListener() {
@Override
public void intervalRemoved(ListDataEvent e) {
fireIntervalRemoved(DelegatedComboBoxModel.this, e.getIndex0(),
e.getIndex1());
}
@Override
public void intervalAdded(ListDataEvent e) {
fireIntervalAdded(DelegatedComboBoxModel.this, e.getIndex0(),
e.getIndex1());
}
@Override
public void contentsChanged(ListDataEvent e) {
fireContentsChanged(DelegatedComboBoxModel.this, e.getIndex0(),
e.getIndex1());
}
};
public DelegatedComboBoxModel(ListModel<T> listModel) {
// DefaultComboBoxModel<E>
this.listModel = listModel;
if (listModel.getSize() > 0) {
selectedObject = listModel.getElementAt(0);
}
listModel.addListDataListener(listDataChangeDelegater);
}
@Override
public T getElementAt(int index) {
if (index >= 0 && index < listModel.getSize())
return listModel.getElementAt(index);
else
return null;
}
@Override
public int getSize() {
return listModel.getSize();
}
@Override
public void setSelectedItem(Object anObject) {
if ((selectedObject != null && !selectedObject.equals(anObject))
|| selectedObject == null && anObject != null) {
selectedObject = anObject;
fireContentsChanged(this, -1, -1);
}
}
@Override
public Object getSelectedItem() {
return selectedObject;
}
}
I cannot figure out what went wrong with the above code.
How to fix the code ?
(Limitation : Should not use or subclass DefaultComboBoxModel
or use any third-party library.)