ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java-如果在combox1中选择了一个值,则应在所有其他组合框中将其禁用

2019-10-13 14:14:34  阅读:231  来源: 互联网

标签:jcombobox java swing combobox


您好,我还是Java的新手,希望学习这个不错的功能…
您好,我有4个组合框,里面和里面的相同

-Select-
Item 1
Item 2
Item 3
Item 4

当我在comboBox1上选择项目1时,
 comboBox2,comboBox3和comboBox4仅具有这些元素

-Select-
Item 2
Item 3
Item 4

然后当我在comboBox2上选择第3项时,comboBox3和comboBox4都有这个剩余元素

-Select-
Item 2
Item 4

有人知道如何在Java上执行此操作吗?我正在Netbeans上使用GUI Builder …

编辑1

这是我的代码

private void jComboBox1ItemStateChanged(java.awt.event.ItemEvent evt) {
    jComboBox2.removeItem(jComboBox1.getSelectedItem());
    jComboBox3.removeItem(jComboBox1.getSelectedItem());
    jComboBox4.removeItem(jComboBox1.getSelectedItem());
}

在那之后我添加了相同的代码jComboBox2,jComboBox3和jComboBox4 …
当我选择-选择-时-选择-也消失了…

还有一个问题是,当我已经选择全部并且想再次更改它时…所有项目都消失了,不再有其他选择了..我只想再次备份可用项目…

编辑2

jComboBox1
-Select-
Item 1
Item 2 <-- I select Item2, then the other combo box will remove Item 2**
Item 3
Item 4

jComboBox2
-Select-
Item 1
Item 3 <-- then I select Item 3
Item 4

jComboBox3
-Select-
Item 1
Item 4 <-- then Item 4

jComboBox4
-Select-
Item 1 

但是我改变主意了…然后我需要回到jComboBox2以选择Item3
所以我选择
jComboBox2并选择-Select-,因此我可以在jComboBox4上选择item3

但结果是
jComboBox4
空(无项目)

解决方法:

不知道您的两个答案中的哪个将被删除,但这又是相同的答案.请注意,您可以使用循环创建所有JComboBoxes和选项,以防止真正冗长的重复代码.然后,您可以使用getSource()方法来判断事件来自哪个组合框.如果将JComboBoxes创建为数组,则可以非常清晰地循环遍历它们.为了重新添加内容,我只需要跟踪选择了什么以及使用String数组的组合框.然后,您可以检查此数组,并根据需要使用它来添加项目.请注意,它们不会以相同的顺序返回.如果您想要该功能,则可以使用insertItemAt,但这可能会有些混乱(因为自从添加和删除项目以来索引一直在变化),因此我将其省略.

//Declare and initialize the options that the comboboxes will have
String[] options = {"-Select-", "Item 1", "Item 2", "Item 3", "Item 4"};
//Declare and initialize an array that will hold the currently selected options in each combobox by index
//For example the currently selected value of comboBoxes[1] is selected[1]
String[] selected = {"-Select-", "-Select-", "-Select-", "-Select-"};

//Declare and initialize an array of comboBoxes. 
//Four comboboxes will be created all containing the options array
JComboBox[] comboBoxes = new JComboBox[4];
for(int i = 0; i < comboBox.length; i++) {
    comboBoxes[i] = new JComboBox(options);
}

private void jComboBox1ItemStateChanged(java.awt.event.ItemEvent evt) {
    //Loop through all of the comboboxes in comboBoxes
    for(int i = 0; i < comboBoxes.length; i++) {
        //Check to see if the current combobox in the array matches the source of your event
        if(evt.getSource() == comboBoxes[i]) {
            //Get the string value of the combobox that fired the event
            String currentSelection = (String)comboBoxes[i].getSelectedItem();
            //Make sure that the value actually changed
            if(!currentSelection.equals(selected[i]) {
                //If the previous value of the combobox was "-Select-" don't add it to all the other comboboxes
                if(!selected[i].equals(options[0])) {
                    //Add back the previous value to all comboboxes other than the one that fired the event
                    for(int j = 0; j < comboBoxes.length; j++) {
                        if(j != i) {
                            comboBoxes[j].addItem(selected[i]);
                        }
                    }
                }
                //If current value of the combobox is "-Select-" don't remove it from all other comboboxes
                if(!currentSelection.equals(options[0]) {
                    //Remove the current value from all comboboxes other than the one that fired the event
                    for(int j = 0; j < comboBoxes.length; j++) {
                        if(j != i) {
                            comboBoxes[j].removeItem(comboBoxes[i].getSelectedItem());
                        }
                    }
                }
            }
            //Set the selected item for the combobox that fired the event to the current value
            selected[i] = currentSelection;
        }
    }
}

标签:jcombobox,java,swing,combobox
来源: https://codeday.me/bug/20191013/1908384.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有