2016-05-19 15 views
0

私は次元50x50の2次元配列(行列)を持っています。これらのマトリクスでは、各位置の値は0または1です。 このマトリクスは、値が0または1の場合、白または黒の50x50ボタンのグリッドレイアウトで表示されます。 ボタンを押すと、 Matrixは値を1に変更する必要があります。 これを実装するには、forループで実行される各行列位置に対して1つのButtonでGridを作成します。また、このforループの各ButtonのActionListenerを実装します。私は、ActionListenersを使ってポジションの値を変更しようとしました。ボタンを作成する関数と各ポジションのActionListenerに、マトリックス内の位置の行と列の2つのパラメータを指定しました。 しかし、私はボタンを押すと、私はいつもNullPointerExceptionを取得します。あなたはNPEを取得する理由this.matrix=matrixJava 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); 
    } 
} 
+0

について

(http://stackoverflow.com/questions/35880846/using-multiple-jbuttons-with-the-same-label-in-java/35880892#35880892 ) – MadProgrammer

+0

@Alexあなたの問題を修正しましたか? –

答えて

関連する問題