I have a JComboBox
that contains three Items {"Personel", "Magasinier", "Fournisseur"}
.
I want this JComboBox
to display the value "Choisir une option :"
, which is a non-selectable value.
I tried this code after initComponents();
:
this.jComboBox1.setSelectedItem("Choisir une option :");
but it doesn't work.
How can I do that ?
You could override the selection code in your JComboBox
model, with code such as the following SSCCE:
public class JComboExample {
private static JFrame frame = new JFrame();
private static final String NOT_SELECTABLE_OPTION = " - Select an Option - ";
private static final String NORMAL_OPTION = "Normal Option";
public static void main(String[] args) throws Exception {
JComboBox<String> comboBox = new JComboBox<String>();
comboBox.setModel(new DefaultComboBoxModel<String>() {
private static final long serialVersionUID = 1L;
boolean selectionAllowed = true;
@Override
public void setSelectedItem(Object anObject) {
if (!NOT_SELECTABLE_OPTION.equals(anObject)) {
super.setSelectedItem(anObject);
} else if (selectionAllowed) {
// Allow this just once
selectionAllowed = false;
super.setSelectedItem(anObject);
}
}
});
comboBox.addItem(NOT_SELECTABLE_OPTION);
comboBox.addItem(NORMAL_OPTION);
frame.add(comboBox);
frame.pack();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
frame.setVisible(true);
}
});
}
}
This will display a combo box with the intial selection of "- Select an Option -
". As soon as the user selects another option, it will not be possible to select the original option again.
I stumbled upon 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) {
// Allow this just once
selectionAllowed = false;
super.setSelectedItem(anObject);
}
}
});
addItem(placeHolder);
}
}
When adding a place holder you create a anonymous object and overriding the toString method. Implementation could look like this:
public class car{
String final model;
public car(String model){
this.model = model;
}
}
and the creation of the JEComboBox:
JEComboBox comboBoxWithPlaceHolder = new JEComboBox<Car>(new Car{
public String toString(){
return "- Select your car -"
}
});
Pros
Cons
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With