java - 恢复 JCombobox 的选择

标签 java swing jcombobox itemlistener

我们正在尝试对使用 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/

相关文章:

java - GWT 分割点有冗余片段吗?

java - 从 Java 向 Jenkins 传递值

java - JTable 中鼠标拖动和并发更新导致选择丢失

java - 如何在 Java 中阻止重新绘制以前的图形?

java - 如何在JTextPane中放置光标或选择文本时更改JCombobox中相应的字体名称?

java - 为什么这个通配符有效?

java - Android 从 URL 加载到位图

java - 将所有输入转换为大写

java - 在 JComboBox 项中显示按钮

java - 设置 JTable、Java 的条件