繁体   English   中英

Java GUI ActionListener。 找出按下了哪个按钮

[英]Java GUI ActionListener. Finding out which button was pressed

我有一个尺寸为50x50的二维数组(矩阵)。 在这些矩阵中,每个位置的值均为0或1。此矩阵由具有50x50按钮的网格布局表示,如果值为0或1,则为白色或黑色。如果按按钮,矩阵中的相关位置应为将值更改为1。为实现此目的,我为每个矩阵位置创建一个带有一个Button的Grid,由for循环执行。 我还为该for循环中的每个Button实现了一个ActionListener。 我尝试通过使用ActionListeners来更改位置的值,方法是为函数创建矩阵的每个位置的按钮和ActionListener两个参数,用于矩阵中位置的行和列。 但是有一个错误,所以如果我按一个Button,我总是会收到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);
    }
}
public Bild(Matrix matrix) {
        matrix = matrix;
    }

矩阵隐藏了您的类变量,因此当您引用一类时,您必须引用this.matrix ,应该是this.matrix=matrix

这就是为什么您获得NPE。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM