制作一个包含JPanel数组的棋盘

时间:2015-05-08 19:52:10

标签: java arrays swing

我正在做一个棋盘,我的想法是制作一个JPanel数组,每个框都是一个带颜色的JPanel,我有这个问题,当我做这样的任务 “chessboard [rows] [columns] = b”并且compile给了我一个例外。

为什么作业会给我一个错误?

我该如何解决?

布局网格应该放在JFrame还是JPanel?

感谢。

  

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:0

头等舱

public class ChessBoard extends JPanel {
    private JPanel[][] chessBoardSquares = new JPanel[8][8];

    private final JPanel tile;


    public ChessBoard () {
        tile = new JPanel();
         tile.setLayout(new GridLayout(8, 8));

        for (int rows = 0; rows < 8; rows++) {
            for (int columns = 0;columns< 8;columns++) {
               JPanel b = new JPanel();

                 chessBoardSquares  = new JPanel[rows][columns];

                if ((rows+columns +1)%2 == 0){
                    b.setBackground(Color.WHITE);
               chessBoardSquares[rows][columns] = b;
                }

               tile.add(   chessBoardSquares [rows][columns]);
            }


        }

    }

}

public class example {
    public static void main(String[] args) {



JFrame window = new JFrame();

 ChessBoard chessBoard = new  ChessBoard();


    window.add( chessBoard  );
    window.setVisible(true);



    }

}

1 个答案:

答案 0 :(得分:2)

你没有正确填充数组。

这个

    for (int rows = 0; rows < 8; rows++) {
        for (int columns = 0;columns< 8;columns++) {
           JPanel b = new JPanel();

             // ***** this creates a completely new array *******
             chessBoardSquares  = new JPanel[rows][columns];

应该是

    for (int rows = 0; rows < 8; rows++) {
        for (int columns = 0;columns< 8;columns++) {
           JPanel b = new JPanel();

             // this assigns a JPanel to an array item
             chessBoardSquares[rows][columns] = new JPanel();

另外,我不知道你在哪里将瓷砖JPanel添加到你的GUI中,你会想要解决这个问题。