你好我还是java上的新手希望学习这个不错的功能...... 你好我有4个组合框,内部和内部相同是
-Select-
Item 1
Item 2
Item 3
Item 4
当我在Item 1
上选择comboBox1
时,
comboBox2,comboBox3 and comboBox4
只包含这些元素
-Select-
Item 2
Item 3
Item 4
然后当我在Item 3
上选择comboBox2
时,comboBox3 and 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 and jComboBox4
...
当我选择-Select-
时-Select-
也消失了......
另一个问题是,当我已经选择所有并且想要再次更换它时...所有项目都已消失,不再有更多选择..我只是想再次支持可用的项目......
编辑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-
,以便我可以在item3
上选择jComboBox4
但结果是 jComboBox4 null(没有项目)
答案 0 :(得分:0)
当某些组合框的状态发生变化时,您不仅应该从其他组合框中删除项目,还应该插入。 例如,如果选择 item1 ,然后您决定选择 item3 ,则必须从所有其他组合框中删除 item3 并插入< b> ITEM1
答案 1 :(得分:0)
您可以使用某种“代理”模型来过滤单个组合框......
您可以从包含所有可用项目的单个主组合框模型开始,而不是尝试添加和删除不同组合框中的项目。
然后每个组合框都有自己的“代理”模型(使用主模型作为基础),然后可以从组合框使用的列表中“过滤”项目。
通过这种方式,您只需要告诉“代理”模型过滤掉哪些项目,并允许底层API处理其余的事项。
答案 2 :(得分:0)
要解决“选择”问题,您可以验证所选索引是否不同于0(假设“选择”选项始终是第一个)。
每次更改组合时,都需要删除其他组合上的所选项目,并在其他组合上添加未选择的项目。
答案 3 :(得分:0)
您可以更清晰地使用循环创建所有这些框和选项。此代码未经测试,但应该可以使用。
//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;
}
}
}