我有创建棋盘的代码。它最近工作,但我不确定我改变了什么。当我运行它时,会出现一个空窗口。
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);
}
}
答案 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;重新正确定位。