JPanel棋盘没有显示

时间:2014-09-11 13:42:45

标签: java swing jframe awt

我有创建棋盘的代码。它最近工作,但我不确定我改变了什么。当我运行它时,会出现一个空窗口。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Scanner;

public class Chess extends JFrame implements ActionListener {

    JButton[][] a = new JButton[8][8];        //This is the individual squares of the game board
    JPanel board = new JPanel();              //The first instance of the game board   

    int lineCounter = 0;                      //Records the current horizontal row

    String[][] pieceList = new String[8][8];  //This list has the game pieces recorded in it


    public Chess() {

        //Create the board
        setTitle("CHESS");
        setSize(600,600);                      //Sets the window size to 600x600
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setLayout(new GridLayout(8,8));        //Sets the game board to an 8x8 grid

        for (int i = 0; i < 8; i++) {                            /*This nested loop determines                    the colour of the the board squares, and which colour pieces should go 
                                                              onton which tiles.*/
            for (int j = 0; j < 8; j++){

                if((i+j)%2 == 0 && lineCounter < 3) {              //This if statement sets the top part of the game board, and sets the red pieces
                    pieceList[i][j] = "RedPiece";
                    a[i][j] = new JButton();
                    a[i][j].setBackground(Color.black);
                    board.add(a[i][j]);
                } else if ((i+j)%2 == 0 && lineCounter >= 5) {    //This if statement sets the bottom of the board, and the blue pieces
                    pieceList[i][j] = "BluePiece";
                    a[i][j] = new JButton();
                    a[i][j].setBackground(Color.black);
                    board.add(a[i][j]);

                } else if ((i+j)%2 == 0 && 3 <= lineCounter && lineCounter < 5) {      //This if statement sets the middle of the game board
                    pieceList[i][j] = null;
                    a[i][j] = new JButton();
                    a[i][j].setBackground(Color.black);
                    board.add(a[i][j]);
                } else {
                    pieceList[i][j] = null;
                    a[i][j] = new JButton();
                    a[i][j].setBackground(Color.gray);
                    board.add(a[i][j]);
                }
            }
            lineCounter++;
        }
    }

接下来是一个for循环,添加新的JButtons并设置背景颜色。 setVisible(true)在一个单独的类中。我很乐意发布更多代码,但我确定问题出在某处。我可能遗漏了一些东西。目前,我还没有添加游戏作品。 这是我使用的驱动程序类:

   public class ChessGUI {
      public static void main(String[] args){
          Chess run = new Chess();
          run.setVisible(true);
      }
   }

3 个答案:

答案 0 :(得分:0)

仔细检查我认为您没有将这些按钮添加到您创建的面板上,并将该面板添加到框架设置边框布局到面板而不是Chess类本身.....希望它有帮助

答案 1 :(得分:0)

使用for循环发布其他类。 我想你添加这样的按钮(例如):

   board.add(a[0][0]);

如果是这样,你可以正确添加按钮,但是你需要将JPanel添加到JFrame中,如下所示:

   add(board);

(你只需添加它,因为你的类扩展了JFrame,在这个类中添加它。)

修改 和我想象的一样。您需要将JPanel(在创建之后)添加到JFrame,如下所示:

   JPanel board = new JPanel();
   add(board);

在你的情况下,在构造函数的求助中添加这一行。

答案 2 :(得分:0)

您的代码有两个问题。首先,您需要在Chess对象上设置布局,而不是在您要添加Button的面板上。其次,您永远不会将JPanel添加到框架中。

由于您似乎并不真正需要该面板,因此最简单的解决方法是删除JPanel board = new JPanel();,并将每board.add(a[i][j]);更改为add(a[i][j]);

这会将Button直接添加到框架中(因此实际显示它们),然后将它们放入带有Container的{​​{1}}中,以便它们和#39;重新正确定位。