私は次元50x50の2次元配列(行列)を持っています。これらのマトリクスでは、各位置の値は0または1です。 このマトリクスは、値が0または1の場合、白または黒の50x50ボタンのグリッドレイアウトで表示されます。 ボタンを押すと、 Matrixは値を1に変更する必要があります。 これを実装するには、forループで実行される各行列位置に対して1つのButtonでGridを作成します。また、このforループの各ButtonのActionListenerを実装します。私は、ActionListenersを使ってポジションの値を変更しようとしました。ボタンを作成する関数と各ポジションのActionListenerに、マトリックス内の位置の行と列の2つのパラメータを指定しました。 しかし、私はボタンを押すと、私はいつもNullPointerExceptionを取得します。あなたはNPEを取得する理由this.matrix=matrix
Java GUIのActionListener。どのボタンが押されたかを知る
ザッツことshoudクラス1、 にrefferとき、あなたがそれthis.matrixにrefferしなければならないので、
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);
}
}
について
(http://stackoverflow.com/questions/35880846/using-multiple-jbuttons-with-the-same-label-in-java/35880892#35880892 ) – MadProgrammer
@Alexあなたの問題を修正しましたか? –