java - 尝试将监听器添加到 JTextFields 数组时出现错误

标签 java arrays loops listener

我有这段代码,我正在尝试将 MouseListener 添加到 JTextFields 的 2D 数组中。我收到 NullPointerException 并且不确定我哪里做错了。这是我正在使用的一些变量。

private int totalX = 20;
private int totalY = 20;

private JTextField[][] fields;
fields = new JTextField[totalX][totalY];

for (y = 0; y < totalY; y++) {
    for (x = 0; x < totalX; x++) {
        fields[x][y].addMouseListener(this);
        new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                for (y = 0; y < totalY; y++) {
                    for (x = 0; x < totalX; x++) {
                        if (fields[x][y].hasFocus()) {
                            if (value == null) {
                                value = "W";
                            } else {
                                fields[x][y].setText(value);
                            }
                        }
                    }
                }
                Draw();
            }
        };
    }
}

最佳答案

您应该在使用数组中的所有元素之前对其进行初始化,因为此行创建了一个内部包含 nulls 的数组

fields = new JTextField[totalX][totalY];

所以提前创建一个新的数组元素

fields[x][y] = new JTextField();
fields[x][y].addMouseListener(this);

顺便说一句,您的代码看起来有点奇怪,您创建了一个新的 MouseAdapter() 但不使用它。因此,它将被垃圾收集。

更新:您应该将 new MouseAdapter() 作为 addMouseListener() 方法的参数

fields[x][y].addMouseListener(new MouseAdapter() {
    @Override
    public void mousePressed(MouseEvent e) {
        ... Put your code here ...
    });

关于java - 尝试将监听器添加到 JTextFields 数组时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44480629/

相关文章:

javascript - 循环遍历对象并显示输入字段

java - Blue J,我的 listMembers 方法没有从我的数组列表中打印出正确的数据

java - 基于ONVIF wsdl(Top Down Method)生成Java webservice

java - 可部署的 Spring Boot Wars OAuth2 拒绝异常

javascript - 从 javascript 数组创建 HTML 表格

javascript - 在每次出现特定子字符串时剪切数组中存在的 JS 字符串并附加到同一数组

java - 当我包含共享首选项时, Activity 崩溃

arrays - 如何在 Postgres 中转换嵌套在另一个数组内的对象内的 JSON 数组?

Javascript:for 循环 i++ 和 (i+1) 之间的区别

javascript - 向下移动溢出列表框,因为每个复选框都是 AUTO 未被循环选中的