Я пытался заставить слушателя (я не совсем уверен, должен ли я использовать ItemListener или ActionListener) реагировать на изменения в JComboBox, изменяя изображение JLabel рядом с полем.
Я попытался определить метод actionPerformed в конструкторе класса при вызове addActionListener в поле со списком, а также вне конструктора, и кажется, что actionPerformed никогда не выполняется. Я добавил println к каждому из них, чтобы проверить, работает ли метод на самом деле, когда я выбираю элемент в поле, но ни один из них не выводит ничего, что наводит меня на мысль, что метод actionPerformed по какой-то причине не выполняется. Многие другие ответы в других местах определили actionListeners и actionPerformed в нескольких разных местах, таких как отдельный класс или в объявлении переменной экземпляра.
public class MainBattle
{
//instance variables
public MainBattle() throws FileNotFoundException,IOException
{
//creation of ArrayLists used later
for(JComboBox<String> j : party1)
{
j.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("Listener active");
if(e.getSource() instanceof JComboBox)
{
JComboBox<String> cb = (JComboBox<String>)e.getSource();
String content = (String)cb.getSelectedItem();
if(party1.indexOf(cb) != -1)
{
party1Image.get(party1.indexOf(cb)).setIcon(new ImageIcon(".\\res\\sprites_small\\"
+ content.substring(0,content.indexOf(" ")) + ".png"));
}
}
selectFrame.revalidate();
selectFrame.repaint();
}
});
}
createUI();
}
public void createUI()
{
//building GUI elements and displaying
for(int i = 0; i < 6; i++)
{
party1.add(new JComboBox<String>());
party2.add(new JComboBox<String>());
}
for(int i = 0; i < 6; i++)
{
party1Image.add(new JLabel(new ImageIcon(".\\res\\sprites_small\\0.png")));
party2Image.add(new JLabel(new ImageIcon(".\\res\\sprites_small\\0.png")));
}
//building GUI elements and displaying
}
// Commented out to make sure existence of multiple methods is not problematic
/*
public void actionPerformed(ActionEvent e)
{
System.out.println("Action");
}
*/
public static void main(String[] args) throws IOException
{
new MainBattle();
}
}