我有一个JComboBox
,其中包含三个项目{"Personel", "Magasinier", "Fournisseur"}
。显示JComboBox的不可选默认值
我希望这个JComboBox
显示值"Choisir une option :"
,这是一个不可选择的值。
我想这个代码initComponents();
后:
this.jComboBox1.setSelectedItem("Choisir une option :");
,但它不工作。
我该怎么做?
我有一个JComboBox
,其中包含三个项目{"Personel", "Magasinier", "Fournisseur"}
。显示JComboBox的不可选默认值
我希望这个JComboBox
显示值"Choisir une option :"
,这是一个不可选择的值。
我想这个代码initComponents();
后:
this.jComboBox1.setSelectedItem("Choisir une option :");
,但它不工作。
我该怎么做?
您可以覆盖选择代码在你JComboBox
模型,其代码如下所示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);
}
});
}
}
这将显示一个组合框的“- Select an Option -
”的INTIAL选择。只要用户选择另一个选项,就不可能再次选择原始选项。
我偶然发现了这个问题,并对邓肯的答案做了一些修改。我的解决方案如下所示:
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);
}
}
添加占位符时,将创建一个匿名对象并覆盖toString方法。实施看起来是这样的:
public class car{
String final model;
public car(String model){
this.model = model;
}
}
和JEComboBox的创作:
JEComboBox comboBoxWithPlaceHolder = new JEComboBox<Car>(new Car{
public String toString(){
return "- Select your car -"
}
});
优点
缺点
搜索类似'placeholder'属性,它进来HTML挥杆 – Abubakkar
参见本[Q&A](http://stackoverflow.com/q/5231517/230513)。 – trashgod