已有258人关注
为什么按钮不能用for循环添加事件监听?
发表在Java答疑区 2017-05-20
是否精华
版块置顶:

随便点一个按钮,会出现下面的这一堆错误


分享到:
精彩评论 2
David
学分:914 LV7
TA的每日心情
最后的冲刺
2017-07-15 10:46:08
2017-05-22
沙发

可以用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。

LSty
学分:23 LV2
2017-05-22
板凳

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^)┛

首页上一页 1 下一页尾页 2 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照