Java 下面是添加额外combobox项的代码,但是相应的combobox值没有改变

Java 下面是添加额外combobox项的代码,但是相应的combobox值没有改变,java,arrays,user-interface,combobox,add,Java,Arrays,User Interface,Combobox,Add,它没有更改相应的组合框值,为什么它更改的是最新的组合框值而不是相应的组合框 当我运行此代码时,在单击addfield两次之后,当我更改第一个组合框时,第二个组合框的值应该更改而不是第四个组合框,这是错误的,我想要的是根据第一个组合框的选择,第二个组合框应该是可选的,如果选择了第三个组合框,那么第四个组合框应该是可选的 “添加字段”按钮在窗口中添加额外的组合框,其工作方式是,在“添加字段”按钮按下两次的情况下,我选择第一个组合框,分别选择第二个组合框,但由于某种原因,第四个组合框变为可选择。当你运

它没有更改相应的组合框值,为什么它更改的是最新的组合框值而不是相应的组合框

当我运行此代码时,在单击addfield两次之后,当我更改第一个组合框时,第二个组合框的值应该更改而不是第四个组合框,这是错误的,我想要的是根据第一个组合框的选择,第二个组合框应该是可选的,如果选择了第三个组合框,那么第四个组合框应该是可选的

“添加字段”按钮在窗口中添加额外的组合框,其工作方式是,在“添加字段”按钮按下两次的情况下,我选择第一个组合框,分别选择第二个组合框,但由于某种原因,第四个组合框变为可选择。当你运行上面的代码时,你会更好地理解这个问题,我已经在描述中提供了完整的代码,请帮助

package addextraitem;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JComboBox;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class ExtraComboBox {

    int count = 0;
    JComboBox fruits[] = new JComboBox[10];;
    JPanel comboPanel;
    JFrame guiFrame;
    //JComboBox dude1;
    String[] valOptions3 = {"&"};
    String[] valOptions2 = {"|->", "|=>"};
    String[] valOptions1 = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
    String[] valOptions0 = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
    String[] fruitOptions1 = {"", "Delay1", "Delay2", "Delay3"};
    String chosenString;
    int numPairs1 = valOptions0.length;
    JButton addField;
    int count1 = 0;
    JComboBox[] ComboBox4 = new JComboBox[numPairs1];
    JComboBox[] ComboBox5 = new JComboBox[numPairs1];
    JComboBox[] ComboBox6 = new JComboBox[numPairs1];
    String[] comborel = {"a", "b", "c", "d", "e"};
    JLabel lb;
    JComboBox dude;
    JTextField handle;
    String clockOptions1;
    JLabel dudel[] = new JLabel[10];
    JComboBox dude1[] = new JComboBox[10];
    JComboBox dude2[] = new JComboBox[10];;
    //JComboBox dude1[] = new JComboBox[10];
    String[] valOptions = {"Unknown", "0", "1"};
    String [] s = {"a", "b", "c", "d", "e", "f", "g", "h", "i"};
    int cnt = 0;
    int i = 0;
    JLabel comboLbl;
    JLabel lb1;
    //Note: Typically the main method will be in a
    //separate class. As this is a simple one class
    //example it's all in the one class.
    public static void main(String[] args) {

        new ExtraComboBox();
    }

    public ExtraComboBox()
    {
        guiFrame = new JFrame();

        //make sure the program exits when the frame closes
        guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        guiFrame.setTitle("ComboBox GUI");
        guiFrame.setSize(350,250);

        //This will center the JFrame in the middle of the screen
        guiFrame.setLocationRelativeTo(null);

        //The first JPanel contains a JLabel and JCombobox
        comboPanel = new JPanel();

        addField = new JButton("Add Field");
        addField.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent event)
            {
                if (event.getSource() == addField) {
                    count1++;
                    comboLbl = new JLabel("Select a relation:");
                    fruits[count1] = new JComboBox(fruitOptions1);
                    MyItemListener2 actionListener2 = new MyItemListener2();
                    fruits[count1].addItemListener(actionListener2);
                    //System.out.println("HI: " + fruits[count1].getParent());
                    dude2[count1] = new JComboBox();
                    System.out.println("ADD FIELDS: " + count1);
                    comboPanel.add(comboLbl);
                    comboPanel.add(fruits[count1]);
                    comboPanel.add(dude2[count1]);
                    guiFrame.revalidate();
                    guiFrame.validate();
                    guiFrame.pack();
                    guiFrame.repaint();
                }
            }
        });

        comboPanel.setLayout(new BoxLayout(comboPanel, BoxLayout.Y_AXIS));
        comboPanel.add(addField);                
        //The JFrame uses the BorderLayout layout manager.
        //Put the two JPanels and JButton in different areas.
        guiFrame.add(comboPanel, BorderLayout.NORTH);        
        //make sure the JFrame is visible
        guiFrame.setVisible(true);
    }

    class MyItemListener2 implements ItemListener {
        // This method is called only if a new item has been selected.
        public void itemStateChanged(ItemEvent evt) {
        JComboBox cb = (JComboBox) evt.getSource();

        Object item = evt.getItem();

        if (evt.getStateChange() == ItemEvent.SELECTED) {
            // Item was just selected
            System.out.println("COUNTER: " + count1);
            System.out.println(evt.getItem());

            dude2[count1].removeAllItems();

            if(evt.getItem() == "Delay1") {
                System.out.println(valOptions1.length);
                for(int i = 0; i < valOptions1.length; i++) {
                    dude2[count1].addItem(valOptions1[i]); //dude1 = new JComboBox(valOptions1);
                    System.out.println(valOptions1[i]);
                }
            }
            else if(evt.getItem() == "Delay2") {
                System.out.println(valOptions2.length);
                for(int j = 0; j < valOptions2.length; j++) {
                    System.out.println(valOptions2[j]);
                    dude2[count1].addItem(valOptions2[j]); //dude1 = new JComboBox(valOptions1);
                }
            }
            else if(evt.getItem() == "Delay3") {
                System.out.println(valOptions3.length);
                for(int j = 0; j < valOptions3.length; j++) {
                    System.out.println(valOptions3[j]);
                    dude2[count1].addItem(valOptions3[j]); //dude1 = new JComboBox(valOptions1);
                }
            }
        } else if (evt.getStateChange() == ItemEvent.DESELECTED) {
            // Item is no longer selected
        }
    }
}

}
package addextraitem;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JComboBox;
导入javax.swing.JButton;
导入javax.swing.JLabel;
导入javax.swing.JList;
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.event.ActionListener;
导入java.awt.event.ActionEvent;
导入java.awt.event.ItemEvent;
导入java.awt.event.ItemListener;
导入java.io.ByteArrayInputStream;
导入java.io.InputStream;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入javax.swing.BorderFactory;
导入javax.swing.BoxLayout;
导入javax.swing.DefaultComboxModel;
导入javax.swing.JOptionPane;
导入javax.swing.JScrollPane;
导入javax.swing.JTextArea;
导入javax.swing.JTextField;
公共类体外麻醉箱{
整数计数=0;
JComboBox水果[]=新JComboBox[10];;
JPanel小组;
JFrame-guiFrame;
//JComboBox-1;
字符串[]valOptions3={“&”};
字符串[]valOptions2={“|->”,“|=>”};
字符串[]valOptions1={“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”};
字符串[]valOptions0={“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”};
字符串[]水果选项1={”、“Delay1”、“Delay2”、“Delay3”};
弦弦弦;
int numPairs1=valOptions0.length;
JButton-addField;
int count1=0;
JComboBox[]组合框4=新的JComboBox[numPairs1];
JComboBox[]组合框5=新的JComboBox[numPairs1];
JComboBox[]组合框6=新的JComboBox[numPairs1];
字符串[]comborel={“a”、“b”、“c”、“d”、“e”};
JLabel-lb;
JComboBox杜德;
JTextField句柄;
字符串时钟选项1;
JLabel dudel[]=新JLabel[10];
JComboBox dude1[]=新JComboBox[10];
JComboBox dude2[]=新的JComboBox[10];;
//JComboBox dude1[]=新JComboBox[10];
字符串[]valOptions={“未知”、“0”、“1”};
字符串[]s={“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”、“i”};
int-cnt=0;
int i=0;
JLabel-comboLbl;
JLabel-lb1;
//注:通常主方法将在
//单独的类。因为这是一个简单的单类
//例如,它都在一个类中。
公共静态void main(字符串[]args){
新的ExtraComboBox();
}
公共外OMBOX()
{
guiFrame=newjframe();
//确保框架关闭时程序退出
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle(“组合框GUI”);
guiFrame.setSize(350250);
//这将把JFrrar放在屏幕中间。
guiFrame.setLocationRelativeTo(null);
//第一个JPanel包含JLabel和JCombobox
comboPanel=newJPanel();
addField=新的JButton(“添加字段”);
addField.addActionListener(新ActionListener()
{
@凌驾
已执行的公共无效操作(操作事件)
{
if(event.getSource()==addField){
count1++;
comboLbl=newjlabel(“选择关系:”);
水果[count1]=新的JComboBox(水果选项1);
MyItemListener2 actionListener2=新建MyItemListener2();
水果[count1]。addItemListener(actionListener2);
//System.out.println(“HI:+fruits[count1].getParent());
dude2[count1]=新的JComboBox();
System.out.println(“添加字段:+count1”);
comboPanel.add(comboLbl);
comboPanel.add(水果[count1]);
comboPanel.add(dude2[count1]);
guiFrame.revalidate();
guiFrame.validate();
guiFrame.pack();
guiFrame.repaint();
}
}
});
comboPanel.setLayout(新的BoxLayout(comboPanel,BoxLayout.Y_轴));
comboPanel.add(addField);
//JFrame使用BorderLayout布局管理器。
//将两个JPanel和JButton放在不同的区域。
添加(comboPanel,BorderLayout.NORTH);
//确保JFrame是可见的
guiFrame.setVisible(true);
}
类MyItemListener2实现ItemListener{
//仅当选择了新项时,才会调用此方法。
公共无效itemStateChanged(ItemEvent evt){
JComboBox cb=(JComboBox)evt.getSource();
对象项=evt.getItem();
if(evt.getStateChange()==ItemEvent.SELECTED){
//项目刚刚被选中
系统输出打印项次(“计数器:+count1”);
System.out.println(evt.getItem());
dude2[count1]。删除AllItems();
如果(evt.getItem()=“Delay1”){
System.out.println(可选值1.长度);
对于(int i=0;iimport java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class ExtraComboBox {
    private int maxFields = 4; // The max number of fields allowed in the dialog
    JComboBox fruits[] = new JComboBox[maxFields];
    JPanel comboPanel;
    JFrame guiFrame;
    String[] valOptions3 = { "&" };
    String[] valOptions2 = { "|->", "|=>" };
    String[] valOptions1 = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
    String[] valOptions0 = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
    String[] fruitOptions1 = { "", "Delay1", "Delay2", "Delay3" };
    JButton addField;
    int count1 = 0;

    JLabel dudel[] = new JLabel[maxFields];
    JComboBox dude2[] = new JComboBox[maxFields];
    String[] valOptions = { "Unknown", "0", "1" };
    String[] s = { "a", "b", "c", "d", "e", "f", "g", "h", "i" };
    private JLabel comboLbl;

    public static void main(String[] args) {
        new ExtraComboBox();
    }

    public ExtraComboBox() {
        guiFrame = new JFrame();

        // make sure the program exits when the frame closes
        guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        guiFrame.setTitle("ComboBox GUI");
        guiFrame.setSize(350, 350);

        // The first JPanel contains a JLabel and JCombobox
        comboPanel = new JPanel();

        addField = new JButton("Add Field");
        addField.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent event) {
                if (event.getSource().equals(addField)) {
                    if (count1 < maxFields) {
                        comboLbl = new JLabel("Select a relation:");
                        fruits[count1] = new JComboBox<String>(fruitOptions1);
                        MyItemListener2 actionListener2 = new MyItemListener2(count1);
                        fruits[count1].addItemListener(actionListener2);
                        // System.out.println("HI: " + fruits[count1].getParent());
                        dude2[count1] = new JComboBox<String>();
                        System.out.println("ADD FIELDS: " + count1);
                        comboPanel.add(comboLbl);
                        comboPanel.add(fruits[count1]);
                        comboPanel.add(dude2[count1]);
                        guiFrame.validate();
                        guiFrame.repaint();
                        count1++;
                    } else {
                        System.out.println("You reached the maximum of 4 fields.");
                    }
                }
            }
        });

        comboPanel.setLayout(new BoxLayout(comboPanel, BoxLayout.Y_AXIS));
        comboPanel.add(addField);
        // The JFrame uses the BorderLayout layout manager.
        // Put the two JPanels and JButton in different areas.
        guiFrame.add(comboPanel, BorderLayout.NORTH);
        // make sure the JFrame is visible
        guiFrame.setVisible(true);
    }

    class MyItemListener2 implements ItemListener {
        private int index;

        public MyItemListener2(int pIndex) {
            super();
            index = pIndex;
        }

        // This method is called only if a new item has been selected.
        public void itemStateChanged(ItemEvent evt) {

            if (evt.getStateChange() == ItemEvent.SELECTED) {
                // Item was just selected
                System.out.println("COUNTER: " + index);
                System.out.println(evt.getItem());

                dude2[index].removeAllItems();
                switch ((String) evt.getItem()) {
                case "Delay1":
                    for (int i = 0; i < valOptions1.length; i++) {
                        dude2[index].addItem(valOptions1[i]); // dude1 = new JComboBox(valOptions1);
                        System.out.println(valOptions1[i]);
                    }
                    break;
                case "Delay2": 
                    for (int j = 0; j < valOptions2.length; j++) {
                        System.out.println(valOptions2[j]);
                        dude2[index].addItem(valOptions2[j]); // dude1 = new JComboBox(valOptions1);
                    }
                    break;
                case "Delay3":
                    for (int j = 0; j < valOptions3.length; j++) {
                        System.out.println(valOptions3[j]);
                        dude2[index].addItem(valOptions3[j]); // dude1 = new JComboBox(valOptions1);
                    }
                }
            }
        }
    }

}