【发布时间】:2017-01-03 05:14:30
【问题描述】:
所以我的问题在于 JComboBoxs 和 ActionListeners。我将制作一个新的简化代码来尝试从我的原始代码中表示问题。我想要一个 JComboBox 添加一个 JComboBox 然后再添加第三个 JComboBox 等等。每次单击它们时,我都希望它们根据以前的 JComboBox 显示的内容更改内容。
无论如何,我现在最大的问题是当我在第一个 JComboBox“racebox”中选择某些东西时。它不仅将“步兵箱”添加到面板中,还添加了我拥有的所有其他 JComboBox,而不是仅在我在相应的 JComboBox 中选择某些内容后才添加它们。
就像当我在 Racebox 中选择某个东西时,它开始从所有其他 actionPerformed 中读取代码。
一个奇怪的事情是 JComboBoxes 在添加“racebox”之后向后添加。 第一种:赛车盒 二:步兵nmrbox 第三:步兵箱
...
public void Attacker(){
racebox = new JComboBox(array);
infantrybox = new JComboBox();
infantrynmrbox = new JComboBox();
panel.add(racebox);
panel.revalidate();
panel.repaint();
racebox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JComboBox cb = (JComboBox)e.getSource();
race = (String)cb.getSelectedItem();
infantrybox.removeAllItems();
for(String s : otherarray){
infantrybox.addItem(s);
}
panel.add(infantrybox);
panel.revalidate();
panel.repaint();
}
});
infantrybox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JComboBox cb = (JComboBox)e.getSource();
infantry = (String)cb.getSelectedItem();
infantrynmrbox.removeAllItems();
for(String s : nmr){
infantrynmrbox.addItem(s);
System.out.println(s + " ");
}
panel.add(infantrynmrbox);
panel.revalidate();
panel.repaint();
}
});
infantrynmrbox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JComboBox cb = (JComboBox)e.getSource();
infantrynmr = Integer.parseInt((String)cb.getSelectedItem());
}
});
...
}
【问题讨论】:
标签: java swing actionlistener jcombobox