恢复Combobox的选择

时间:2014-03-14 12:09:32

标签: java swing jcombobox itemlistener

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

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

  • 我可以从听众那里做到吗?
  • 这是否会导致对我的听众进行递归调用?

1 个答案:

答案 0 :(得分: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次:

  • 用户首次尝试选择无效项目时。
  • 第二次听众将上一个项目设置为所选项目时。