比如我在一个panel上放置10个按钮,然后我有一个int数组num[10],我希望第i个按钮按下时,触发num[i]+1
我用for循环生成按钮,但是碰到个问题就是ActionListener类里面不能调用外面的i,求教怎么写可以实现我要的功能?
for(int i=0;i<10;i++){
JButton btn=new JButton();
btn.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
num[i]++;//这里不能引用i,如何修改可以解决?
}
});
btnpanel.add(btn);
}
Java
我用for循环生成按钮,但是碰到个问题就是ActionListener类里面不能调用外面的i,求教怎么写可以实现我要的功能?
for(int i=0;i<10;i++){
JButton btn=new JButton();
btn.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
num[i]++;//这里不能引用i,如何修改可以解决?
}
});
btnpanel.add(btn);
}
Java
final修饰就意味着不变,就无法通过final i进行循环
编译肯定是通不过的.
可以看看import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;public class Test extends JFrame implements ActionListener { JButton btn1;
/**10个按钮*/
//数组
int[] num = new int[10]; public Test() {
this.setSize(200, 200);
this.setVisible(true);
this.setLayout(new FlowLayout());
btn1 = new JButton("BUTTON1");
this.add(btn1);
btn1.addActionListener(this);//注册监听 } public static void main(String args[]) { new Test(); } @Override
public void actionPerformed(ActionEvent e) {
//根据得到的btn对象确定数组的那个元素自增
if (e.getSource() == btn1) {
num[1]++;
System.out.println("RESULT:" + num[1]);
}
}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Main extends JFrame implements ActionListener {
JButton []btn = new JButton[10];
/**10个按钮*/
//数组
int[] num = new int[10];
public Main() {
this.setSize(200, 200);
this.setVisible(true);
this.setLayout(new FlowLayout());
for(int i=0; i<10; i++){
btn[i] = new JButton("BUTTON" + i);
this.add(btn[i]);
btn[i].addActionListener(this);//注册监听
}
}
public static void main(String args[]) {
new Main();
}
public void actionPerformed(ActionEvent e) {
//根据得到的btn对象确定数组的那个元素自增
for(int i=0; i<10; i++){
if (e.getSource() == btn[i]) {
num[i]++;
}
System.out.println("RESULT: " + num[i]);
}
}
}
for(int i=0;i<10;i++){
JButton btn=new JButton();
final int t = i;
btn.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
num[t]++;// 加一个final再拿来引用即可。。
}
});
btnpanel.add(btn);
}