当前位置: 首页 > 知识库问答 >
问题:

JavaGUI是ActionListener。找出按下了哪个按钮

陈实
2023-03-14

我有一个二维数组(矩阵),尺寸为50x50。在这些矩阵中,每个位置的值为 0 或 1。此矩阵由具有 50x50 按钮的网格布局呈现,如果值为 0 或 1,则这些按钮为白色或黑色。如果我按下一个按钮,矩阵中的相关位置应该将值更改为1。为了实现这一点,我为每个矩阵位置创建了一个按钮的网格,由for循环执行。我还为此 for 循环中的每个按钮实现了一个 ActionListener。我尝试使用 ActionListeners 更改位置的值,方法是为为每个位置创建按钮的函数和为每个位置的 ActionListener 提供两个参数,用于矩阵中位置的行和列。但是有一个错误,所以如果我按下一个按钮,我总是会得到一个NullPointerException。

import javax.swing.*; 
import java.awt.*; 
import javax.swing.border.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Bild extends JFrame { 

    public Matrix matrix;

    public JButton createButton(int a, int x, int y) {

        JButton b = new JButton(); 
        if(a==1){
            b.setBackground(Color.WHITE);   
        }else{
            b.setBackground(Color.BLACK);   
        }
        b.addActionListener( new ActionListener(){
        public void actionPerformed( ActionEvent arg0 ) {
            matrix.matrix[x][y]=1;
        }
        });
        this.add(b); 
        return b;
    }


    public Bild(Matrix matrix) {
        matrix = matrix;
        GridLayout layout = new GridLayout(50,50,0,0);
        this.setLayout(layout); 
        for (int i = 0; i<50; i++) {
            for(int j=0; j<50; j++){
                if (matrix.matrix[i][j]==0){
                    this.add(createButton(1,i,j));
                }else{
                    this.add(createButton(2,i,j));
                }
            }
        }
    }
}
public class Matrix{
    int[][] matrix;
    public Matrix(){
        matrix = new int[50][50];
        for(int i=0; i<50; i++){
            for(int j=0; j<50; j++){
                matrix[i][j]=0;
            }
        }
    }
}
import javax.swing.*; // JFrame, JPanel, ...
import java.awt.*; // GridLayout
public class Main{
    public static void main (String[] args) {
        Matrix matrix = new Matrix();
        JFrame frame = new Bild(matrix);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        frame.setSize(500,500);
        frame.setVisible(true);
    }
}

共有1个答案

林辰钊
2023-03-14
public Bild(Matrix matrix) {
        matrix = matrix;
    }

矩阵隐藏了你的类变量,所以你必须参考它this.matrix当你参考类1时,应该是this.matrix=矩阵

这就是你得到NPE的原因。

有关更多信息https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html

 类似资料:
  • 我知道以前可能有人问过这个问题,但我似乎找不到适合我情况的合理答案。 我有一个表单,表单中有多个提交按钮,我需要知道按下了哪个按钮。 表单内部的一个小代码段可能如下所示: fmt:消息部分只是考虑了客户端的语言并将单词放在按钮上。 到目前为止,我在submit按钮上添加了一个动作处理程序,并在表单上添加了一个隐藏的input元素,告诉我哪个按钮被按下了,但是我需要在不依赖javascript的情况

  • 我试图构建一个GUI,它有许多按钮(JButton)/下拉项(JMenuItem),当按下每个包含字母的按钮时,相关的字母将添加到标签中。 我无法识别按下了哪个按钮。你能给我一个关于如何做到这一点的提示吗?

  • 问题内容: 我想找出在纯JavaScript中以跨浏览器兼容的方式按下了哪些字符键。 问题答案: “清除” JavaScript: jQuery的:

  • 我想知道在多个按钮的列表中按下了哪个按钮。例如,如果按下了第二个按钮,则代码会检测到按下第二个向下的按钮,并返回类似于 。但是,我不知道该怎么做。当我搜索时,jQuery参与其中,但我没有使用jQuery。代码如下: 我尝试使用EventListner,通过将EventListner添加到创建的每个按钮,但这并不能区分单个按钮。请注意,每个按钮都有一个id为和一个类。 如果有人能帮忙,谢谢!

  • 问题内容: 使用jQuery,如何确定绑定到keypress事件时按下了哪个键? 我想在按下时触发提交。 [更新] 即使我找到了(或者更好:一个)自己回答,似乎还有一些变化的空间;) 有没有之间的差异和-尤其是如果我只是在寻找,这永远不会是一个unicode关键? 有些浏览器提供一种属性,而其他浏览器提供另一种属性吗? 问题答案: 实际上这更好:

  • 我动态创建了按钮。 我知道用以下代码单击了哪个按钮; 然而,在这种情况下,我无法知道按钮的名称。因为按钮的名字可以是任何东西。我怎么知道按下了哪个按钮?提前感谢!