【问题标题】:Transfer Items from One JComboBox to another JComboBox将项目从一个 JComboBox 转移到另一个 JComboBox
【发布时间】:2014-08-22 11:27:17
【问题描述】:

您好,我正在尝试将一个对象从一个组合框转移到另一个组合框,反之亦然。 要做到这一点, 我使用 actionListeners 或 ItemListeners,但不幸的是他们没有回答我的问题,或者我的实现中可能有问题。

假设我们有组合框,combobox1 和 combobox2。 基本上, 1.我先把选中的item添加到另一个combobox(combobox2) 2.我删除第一个组合框(combobox1)上的选定项

在尝试调试时,我发现每次我在删除项目的步骤中,另一个组合框的侦听器都会触发,它执行与上述相同的步骤。这会导致一个循环,即删除该项目并将其放回原始组合框。

使用 ItemListener 时,如果选择或不选择适当的条件,则会引发更大的错误。各位大侠帮帮我..

*处于编辑模式/正在制作 SSCE

【问题讨论】:

  • 对 JComboBox 的所有更改都应该在其模型中完成,在这里搜索 DefaultComboBoxModel,更适合 MutableComboBoxModel
  • 这里无法回答此表单中的问题,为了更好的帮助,请尽快发布 SSCCE/MCVE,简短、可运行、可在局部变量中使用 JComboBox 的硬编码值进行编译,也许可以使用 GridLayout 而不是 MigLayout此处为 SSCCE/MCVE 形式的代码
  • 不是一个答案,而是一个建议:为什么不使用两个JLists 而不是组合框?您可以轻松地在列表模型之间传输项目。
  • 但是我们不能用 jcombobox 代替 list 吗?我使用组合框来节省空间。
  • 为了节省空间,@dic19 的建议可以在模态对话框中完成。

标签: java swing jcombobox


【解决方案1】:

按照 mKorbel 爵士的建议,找到了 this。 它成功了,通过 setModel(DefaultComboBoxModel model) 方法设置模型在尝试添加传递的模型的内容时不会触发 ActionListener,而 addItem(Object obj) 方法会触发 ActionListener 导致我描述的破坏我上面的问题。

谢谢大家,我学到了一个叫做 DefaultComboBoxModels 的新东西!

【讨论】:

    【解决方案2】:
    jComboBox12.removeAllItems();
    for (int t = 0; t < jComboBox11.getItemCount(); t++) 
    {
     jComboBox12.addItem(jComboBox11.getItemAt(t));
    }
    

    【讨论】:

    • 纯代码答案没有那么有用。请解释一下。
    • 这不是动态的。您只需删除所有内容并再次添加它们。这会引发上述同样的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    相关资源
    最近更新 更多