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?
A totally different approach would be to add a property to the button, and retrieve that property in your action listener. E.g.
button=new JButton(buttons[i]);
button.putClientProperty( "page", i );
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
setPage((Integer)((JButton)e.getSource()).getClientProperty( "page" ));
}
});
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);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With