我们正在尝试对使用 JCombobox
所做的选择进行验证。如果新选择未通过验证,我们将尝试恢复到之前的选择。
知道如何做到这一点吗?
我创建了 ItemListener
接口(interface)的实现。通过检查 DESELECTED
事件捕获先前的值,并在 SELECTED
事件后验证当前选择。但我不确定需要时在哪里重置为以前的值。
- 我可以从监听器本身执行此操作吗?
- 这会导致递归调用我的监听器吗?
最佳答案
Can I do it from the listener itself ?
是的,你可以。例如:
JComboBox comboBox = new JComboBox();
comboBox.addItemListener(new ItemListener() {
Object previousSelection = null;
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange() == ItemEvent.DESELECTED) {
previousSelection = e.getItem();
} else if(!isValid(e.getItem())) {
JComboBox cb = (JComboBox)e.getSource();
cb.setSelectedItem(previousSelection);
}
}
});
其中 isValid(Object obj)
方法应验证所选项目。
Would that lead to recursive calls to my listener ?
当然,但是之前选择的项目是有效的,因此它将被调用 2 次 top:
- 用户第一次尝试选择无效项目时。
- 监听器第二次将前一项设置为选定项。
关于java - 恢复 JCombobox 的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22404613/