【问题标题】:Multiple JComboBoxes with same data, every item choosable once多个具有相同数据的 JComboBoxes,每个项目可选择一次
【发布时间】:2018-12-07 20:44:14
【问题描述】:

我越来越绝望了……:

我确实有一个带有 40 个 JComboBox 的 FRAME。起初,他们提供所有相同的项目。 如果我在一个特定的 ComboBox 中选择一个项目,它应该在那里被选中,并且不再在所有其他 39 个框中可用。

我尝试使用 ComboBoxModel 很长一段时间,但现在我认为它没有任何意义:在我从模型中删除所选项目的那一刻,它也会从它被选中的 Box 中删除。

那么这样做有意义吗:

  • 类 GUI 中有 40 个 MyComboBoxes
  • 每个 MyComboBox 都实现一个 ItemListener
  • 如果选择了一个项目,则该项目将从其他 39 个列表中删除; 如果取消选择,它将被添加到其他 39 个列表中 (但如果我想那样做,听众不能是一个自己的班级,但 itemEventChanged 方法必须在 GUI 中匿名实现?!)

有更好的方法,不是吗?非常感谢您的帮助!

【问题讨论】:

  • 处理一个类似的问题,我让它工作的方式是使用一个动作监听器。当您从第一个组合框中选择某些内容时,它会在 ArrayList 中创建模型的副本,然后将其初始化为新的 DefaultComboBoxModel。一旦为第二个组合框设置了该模型,您只需删除从第一个组合框中选择的项目。我目前必须为每个不理想的盒子硬编码一个事件,但它可以工作。
  • 这对你有帮助吗,你还在纠结吗?

标签: java swing jcombobox


【解决方案1】:
       for(int x =0;x<YourComboBoxArray.length();x++
    {
        if(e.getSource()==YourComboBoxArray[x])
        {
             try
             {
               ArrayList <String> OptionsList = new ArrayList();
               for(int i=0;i<YourComboBoxArray[x].getItemCount();i++)
               {
                     OptionsList.add(TeamPlayercmbx[x].getItemAt(i).toString();
               }
               DefaultComboBoxModel DCMB = new DefaultComboBoxModel(OptionsList.toArray());
               YourComboBoxArray[x+1].setModel(DCMB);
               YourComboBoxArray[x+1].removeItem(YourComboBoxArray[x].getSelectedItem());
             }
             catch(Exception ex)
             {
                 //Log your errors or whatever you want to do if it's the last ComboBox in the Array
             }
        }
    }

这假设您在组合框数组的每个索引上都有一个动作侦听器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 2018-04-08
    相关资源
    最近更新 更多