Pass variables to ActionListener in Java

actionlistener, java, jbutton, swing

Solution

In addition to Hovercraft's answer, you should note that you're not forced to use anonymous classes for your listeners. The code of Hovercraft's answer is similar to the following one:

private class PageActionListener implements ActionListener {
    private int page;

    public PageActionListener(int page) {
        this.page = page;
    }

    public void actionPerformed(ActionEvent e) {
        setPage(page);
    }
}

...

for(int i = 0; i < 10; i++){
    button = new JButton(buttons[i]);
    button.addActionListener(new PageActionListener(i));
    menu.add(button);
}

Problem

I have something like the code below: ``` for(int i=0;i<10;i++){ button=new JButton(buttons[i]); button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { setPage(i); } }); menu.add(button); } ``` However, the variable `i` isn't defined in the scope of the ActionListener class. How can I pass the variable?

Original source