Zero objects do not play in JComboBox. For example, the combo box getSelectedIndex method that runs when an item is selected will return -1 if the object is null . There may also be other methods that perform null checks and may return incorrect results.
But you can try overriding getSelectedIndex so that it returns 0 instead of -1 if the object is null. Also override selectedItemChanged so that it does not check for zeros. The following seems to work, but there may be other methods that also need to be overridden:
JComboBox mComboBox = new JComboBox(new String[]{"One", "Two"}){ @Override public int getSelectedIndex() { Object sObject = dataModel.getSelectedItem(); int i,c; Object obj; if(sObject==null){ return 0; } for ( i=0,c=dataModel.getSize();i<c;i++ ) { obj = dataModel.getElementAt(i); if ( obj != null && obj.equals(sObject) ) return i; } return -1; } @Override protected void selectedItemChanged() { fireItemStateChanged(new ItemEvent(this, ItemEvent.ITEM_STATE_CHANGED, selectedItemReminder, ItemEvent.DESELECTED)); selectedItemReminder = dataModel.getSelectedItem(); fireItemStateChanged(new ItemEvent(this, ItemEvent.ITEM_STATE_CHANGED, selectedItemReminder, ItemEvent.SELECTED)); } };
However, instead of doing the above, I would recommend using a wrapper object . For instance:
class StringWrapper{ final String s; public StringWrapper(String s){ this.s=s; } @Override public String toString() { return s; } } JComboBox cb = new JComboBox(new StringWrapper[]{ new StringWrapper("one"), new StringWrapper("two"), new StringWrapper("three")}); cb.insertItemAt(new StringWrapper(null), 0);
source share