package org.limewire.ui.swing.components;
import java.util.Vector;
import javax.swing.ComboBoxModel;
import javax.swing.JComboBox;
/**
* This is workaround for two different OSX bugs. If the JComboBox will
* not appear in OSX, there is no need to use this particular subclass.
* Similarly, if a null state is acceptable for this particular JComboBox,
* there is no reason to use this subclass.
* <p>
* The first bug is related to reselecting non-String based models.
* When using a non-String based model, selecting an item and then
* reselecting that item on the next action will cause the combo box
* to be set to null. The renderer will show an empty String and
* calling getSelectedItem() will return null. The expected behaviour
* is for this not return null.
* <p>
* The second bug, I'm not sure if this is a bug or OSX feature though I
* would qualify it as a bug either way, when holding the command key
* and making a selection in a combo box, the item will be set to null.
* Again the renderer will show an empty String and calling getSelectedItem()
* will return null.
* <p>
* If these are ever fixed on OSX, this class may be removed.
*/
public class NonNullJComboBox extends JComboBox {
public NonNullJComboBox() {
super();
}
public NonNullJComboBox(Vector<?> items) {
super(items);
}
public NonNullJComboBox(Object items[]) {
super(items);
}
public NonNullJComboBox(ComboBoxModel aModel) {
super(aModel);
}
@Override
public void setSelectedIndex(int index) {
if(index < 0 || index >= getModel().getSize())
return;
super.setSelectedIndex(index);
}
@Override
public void setSelectedItem(Object o) {
if(o == null)
return;
super.setSelectedItem(o);
}
}