我想知道是否有办法使用循环分配点击事件。
我正在寻找的简单例子:
每个按钮将在myMethod(int)
内执行操作。
所以button[2]
应该myMethod(2)
等等。
// imports...
public class MyClass {
private JButton[] buttons = new JButton[10];
public MyClass() {
// constructor
for ( int i = 0; i < this.buttons.length; i++ ) {
this.buttons[i].addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
MyClass.this.myMethod(i);
}
});
}
}
public void myMethod( int id ) {
// perform actions
//...
}
}
上面的代码抛出错误,该变量必须是最终的或有效的最终。我知道为什么,但我怎么能做类似的事呢?
答案 0 :(得分:3)
只需创建临时最终变量并为其指定i
值。现在,您可以使用final变量将其传递给myMethod
,如下所示:
// imports...
public class MyClass {
private JButton[] buttons = new JButton[10];
public MyClass() {
// constructor
for (int i = 0; i < this.buttons.length; i++) {
final int myFinalIndex = i;
this.buttons[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
MyClass.this.myMethod(myFinalIndex);
}
});
}
}
public void myMethod(int id) {
// perform actions
// ...
}
}