【问题标题】:Reverting the selection of JCombox恢复对组合框的选择
【发布时间】:2014-03-14 12:09:32
【问题描述】:

我们正在尝试对使用 JCombobox 所做的选择进行验证。如果新选择未通过此验证,我们将尝试恢复到以前的选择。 关于如何做到这一点的任何想法?

我创建了ItemListener 接口的实现。通过检查 DESELECTED 事件捕获先前的值,并在 SELECTED 事件之后验证当前选择。但我不确定在需要时在哪里重置为以前的值。

  • 我可以从监听器本身做吗?
  • 这会导致对我的侦听器进行递归调用吗?

【问题讨论】:

  • “我可以从监听器本身做吗?这会导致递归调用我的监听器吗?”只有一种方法可以找出...
  • 我试过但失败了。我想我可能做错了。只是想要一个肯定。

标签: java swing jcombobox itemlistener


【解决方案1】:

我可以从听者本身做吗?

是的,你可以。例如:

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) 方法应验证所选项目的位置。

这会导致对我的侦听器的递归调用吗?

当然,但是之前选择的项目是有效的,所以它会被调用 2 次 top:

  • 用户第一次尝试选择无效项目。
  • 监听器第二次将上一项设置为选中项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2012-01-24
    • 1970-01-01
    • 2018-10-19
    • 2013-09-30
    • 1970-01-01
    相关资源
    最近更新 更多