Использование Action / Item Listener с JComboBox - PullRequest
0 голосов
/ 03 июля 2018

Я пытался заставить слушателя (я не совсем уверен, должен ли я использовать 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();
}

}

...