问题描述
我正在尝试创建一个棋盘,但由于某种原因它不起作用。
final int HEIGHT = 600;
final int WIDTH = 800;
final int ROW = 8;
final int COL = 8;
String COLS = "ABCDEFGH";
JFrame frame = new JFrame();
JPanel chessBoard = new JPanel();
JButton[][] chessSquares = new JButton[ROW+1][COL+1];
public void initializeGUI() {
frame.setSize(WIDTH,HEIGHT);
frame.setTitle("Chess");
chessBoard.setLayout(new GridLayout(ROW,COL));
//Creating the chessboard without the pieces
JButton temp;
for(int row=1; row<=8; row++) {
for(int col=1; col<=8; coL++) {
chessSquares[row][col] = new JButton("row: " + row + "col : " + col);
if ((row+col) % 2 != 0) {
temp = chessSquares[row][col];
temp.setBackground(Color.black);
chessBoard.add(temp);
}
else {
temp = chessSquares[row][col];
temp.setBackground(Color.white);
chessBoard.add(temp);
}
}
}
frame.add(chessBoard);
frame.setResizable(false);
frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
这是它的外观图像:
不起作用的事情列表:
注意 * row 和 cols 的打印只是为了以后帮助我。不属于董事会。不影响棋子的颜色(我试过了)
编辑:将 setopaque 设置为 true 后,我明白了。
有没有办法让整个按钮变黑?
解决方法
有些方块不是黑色的。
我认为这是 Mac LAF 的问题。
退房:How to Set the Background Color of a JButton on the Mac OS
棋盘占据了 GUI 的整个空间。
这就是 BorderLayout 的工作方式。任何添加到 CENTER 的组件都会占用框架的所有未使用空间。
如果您想固定棋盘大小,则需要使用“包装器”面板。
类似于:
//frame.add(chessBoard);
JPanel wrapper = new JPanel();
wrapper.add( chessBoard );
frame.add(wrapper,BorderLayout.CENTER);
JPanel
的默认布局是 FlowLayout
,它将尊重添加到其中的任何组件的首选大小,因此现在按钮将以其首选大小显示。