java JcomboBox 如何能手动输入在下拉列表 生效的选项呢?

如 原选项为 5 15 20 ,现在手动输入 6 ,如何能让6 加入该下拉列表中呢?

第1个回答  2012-04-22
监听事件,改变combobox的model
不过把combobox设置成editable貌似用户体现不太好的样子....

Object[] values = new Object[] { "a", "b", "c", };
final DefaultComboBoxModel model = new DefaultComboBoxModel(values);
JComboBox combo = new JComboBox(model);
combo.setEditable(true);

combo.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (model.getIndexOf(e.getItem()) < 0) {
model.addElement(e.getItem());
}
}
});追问

e.getItem() 内容是对象 对吗?若需将它 转换为 整型数字 该如何实现呢?

追答

——e.getItem() 内容是对象 对吗?
没错,e.getItem()是下拉框的内容

但是你要知道这个内容来自于哪里,它来自于你提供的对象。我在一开始定义了一个数组:
Object[] values = new Object[] { "a", "b", "c", };
这个数组里面对象的类型是String,所以你getItem得到的是String
如果我一开始values里面放整数,那么你会拿到Integer对象
values甚至可以是任何类的对象,下拉框在现实它们的时候会调用toString来显示

但是对于用户动态输入的值,你一定要把它当做String对待(尽管实验证明不是如此,但是那个很复杂,先不管),因为用户无论怎么输入,也不可能输入一个对象,他只能输入字符串。所以这个时候你必须首先调用e.getItem().toString()来拿到新增项目的字符串表达,然后用Integer.parseInt来转换。

追问

你真的好好厉害!不过,成功添加新选项后,下拉列表中的编号改变了,而此时又需要通过jcbo.getSelectedIndex() 来找到所需要的值,如何解决此时抛出的异常呢?
at ch17.Ex17_10$5.itemStateChanged(Ex17_10.java:119)
at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1205)

追答

什么异常?你只贴了调用堆栈,没有贴异常信息

相似回答