随便点一个按钮,会出现下面的这一堆错误
可以用for循环为按钮添加监听事件,具体代码如下:
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class GridLayoutPosition extends JFrame {
int i = 0;
public GridLayoutPosition() {
Container c = getContentPane();
/*
* 设置容器使用网格布局管理器,设置7行3列的网格。
* 组件间水平间距为5像素,垂直间距为5像素
*/
setLayout(new GridLayout(7, 3, 5, 5));
JButton[] button = new JButton[20];
for (i = 0; i < 20; i++) {
button[i] = new JButton("button" + i);
c.add(button[i]); //循环添加按钮
button[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("button" + i);
}
});
}
setSize(300, 300);
setTitle("这是一个使用网格布局管理器的窗体");
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new GridLayoutPosition();
}
}
运行程序后,虽然每个按钮都有监听事件,但结果都是一样的,这是因为窗体显示时,i的值为20。
David 发表于2017-05-22 14:01
可以用for循环为按钮添加监听事件,具体代码如下:
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class GridLayoutPosition extends JFrame {
int i = 0;
public GridLayoutPosition() {
Container c = getContentPane();
/*
* 设置容器使用网格布局管理器,设置7行3列的网格。
* 组件间水平间距为5像素,垂直间距为5像素
*/
setLayout(new GridLayout(7, 3, 5, 5));
JButton[] button = new JButton[20];
for (i = 0; i < 20; i++) {
button[i] = new JButton("button" + i);
c.add(button[i]); //循环添加按钮
button[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("button" + i);
}
});
}
setSize(300, 300);
setTitle("这是一个使用网格布局管理器的窗体");
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new GridLayoutPosition();
}
}
运行程序后,虽然每个按钮都有监听事件,但结果都是一样的,这是因为窗体显示时,i的值为20。
谢谢,我在匿名内类里弄了个成员变量,用来保存按钮下标,成成功┏(^0^)┛