I came across this question and made some changes to Duncan's answer. My solution looks like this:
import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; public class JEComboBox<T> extends JComboBox<T> { public JEComboBox(final T placeHolder){ setModel(new DefaultComboBoxModel<T>() { private static final long serialVersionUID = 1L; boolean selectionAllowed = true; @Override public void setSelectedItem(Object anObject) { if (!placeHolder.equals(anObject)) { super.setSelectedItem(anObject); } else if (selectionAllowed) {
When you add a place owner, you create an anonymous object and override the toString method. An implementation might look like this:
public class car{ String final model; public car(String model){ this.model = model; } }
and creating a JEComboBox:
JEComboBox comboBoxWithPlaceHolder = new JEComboBox<Car>(new Car{ public String toString(){ return "- Select your car -" } });
Arguments
vs
- You need to implement an anonymous subtype of the T method and Override toString () and, therefore, will not work with final classes (it may be messy if the comboBox contains classes that inherit from the interface, since the anonymous subtype must implement the interface, so there will be no return methods .)
source share