java - 组合框 ItemListener 中触发事件的顺序是什么

标签 java swing jcombobox itemlistener

我正在将 ItemListener 添加到组合框,并且我想知道事件 ItemEvent.DESELECTED 是否始终在事件 ItemEvent.SELECTED 之前触发,或者顺序是否未指定。

在一个简单的示例中,似乎 DESELECTED 之前已被触发,但我可以相信这个示例吗?

    combo = new JComboBox<String>(new String[}{"A","B","C"});
    combo.addItemListener(new ItemListener()
    {

        @Override
        public void itemStateChanged(final ItemEvent e)
        {
            if(e.getStateChange() == ItemEvent.SELECTED)
            {
                logger.debug("{} selected", e.getItem());
                // Load the file selected in the JTextArea using JTextArea.setDocument()
            }
            else if(e.getStateChange() == ItemEvent.DESELECTED)
            {
                logger.debug("{} deselected", e.getItem());
                // If doc in the textarea has been modified, save it now
            }
        }
    });

为了向问题添加上下文,我使用组合来选择要在 JTextArea 中加载的文件。用户可以通过文本区域编辑文件。如果她选择组合中的另一个文件,我想通知她前一个文件已被编辑,并要求她确认保存编辑。我可以在组合的 ItemListener 中安全地实现此功能吗?安全地说,我的意思是,如果我在此时调用 textArea.getText() (项目已取消选择),我是否可以确定 textarea 尚未填充要加载的新文件的内容?

最佳答案

general ,顺序指定。特别是,组合选择和文本显示与底层文档状态无关。如果用户选择继续编辑,只需将修改后的文档恢复到文本区域即可。

关于java - 组合框 ItemListener 中触发事件的顺序是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24651310/

相关文章:

java - 填充 JComboBox 时遇到困难

java - 使用 gradle 的 3 个项目的复合构建不起作用

java - 在线程之间共享对象对性能有何影响?

java - 如何在单击 "exit"MenuItem() 时关闭窗口?

java - 如何从 JTextField 获取值到 JComboBox?

java - 如何检测 JComboBox 中选定的对象?

java - 我可以制作无边框的 JTable 列吗?

java - 编译器在 Integer 上的行为不同。为什么下面的代码在一种情况下会出现编译器错误?

java - OS X 上 Java 中的 GUI/线程不稳定性;似乎与 Swing/AWT -> Cocoa 桥有关

java - 将 ListCellRenderer 应用于 JList 上的各个单元格