Так что моя проблема связана с JComboBoxs и ActionListeners. Я сделаю новый упрощенный код, чтобы попытаться представить проблему из моего исходного кода. Я хочу, чтобы JComboBox добавил JComboBox, который затем добавит третий JComboBox и так далее. Каждый раз, когда я нажимаю на них, я хочу, чтобы они меняли содержимое в зависимости от того, что показывает предыдущий JComboBox.JComboBox участвует в других JComboBoxes ActionListeners
В любом случае моя самая большая проблема на данный момент заключается в том, что когда я выбираю что-то в первом JComboBox "racebox". Он не только добавляет «infantrybox» к панели, но также добавляет все другие JComboBoxes, которые у меня есть, вместо добавления их только один раз, когда я выбираю что-то в соответствующем JComboBox.
Это как когда я выбираю что-то в расе, он начинает читать код из любого другого actionPerformed.
Одна вещь, что JComboBoxes добавляется назад после добавления «гонки». Первое: racebox Второе: infantrynmrbox Третье: infantrybox
...
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());
}
});
...
}
Спасибо за ваш ответ. Некоторые из этого кода я вообще не понимаю. Извините, мой код немного неясен. Коробки добавляются только один раз в исходный код. Но проблема в том, что они добавляются все сразу. Я хочу, чтобы все они были добавлены, но не все одновременно. – Richovic
@Richovic, 'Но проблема в том, что они добавляются все сразу.' - добавьте ActionListener в поле со списком ПОСЛЕ того, как вы добавите данные в поле со списком. Если вам нужна дополнительная помощь, разместите надлежащую [mcve], которая демонстрирует проблему. – camickr
Ничего, я понял. Я использовал «setModel» (новый DefaultComboBoxModel()); в некотором смысле, и я получил его работу. Спасибо. – Richovic