我正在尝试创建一个棕褐色和米色方块的棋盘,我的JFrame窗口大小设置为1024x1024,因此是一个正方形。我也使用8x8的gridLayout。
每次运行应用程序时,我都可能得到6x8的网格,下一次运行5 x8,或者下一次运行7x7。
不确定发生了什么......任何帮助都会很好!
public class ChessBoard extends JFrame{
private final JFrame board = new JFrame();
private final JButton button = new JButton();
private final GridLayout grid = new GridLayout(8, 8);
public ChessBoard(){
board.setSize(1024, 1024);
board.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
board.setVisible(true);
board.setLayout(grid);
AddGridColors();
}
private void AddGridColors(){
Color tanColor = new Color(210, 180, 140);
Color beigeColor = new Color(245, 245, 220);
JPanel[] panelArray = new JPanel[63];
int panelArrayIndex;
for(panelArrayIndex = 0; panelArrayIndex < 63; ++panelArrayIndex){
panelArray[panelArrayIndex] = new JPanel();
if(panelArrayIndex == 0){
panelArray[panelArrayIndex].setBackground(tanColor);//tan
panelArray[panelArrayIndex].add(new JLabel("square"+panelArrayIndex));
board.add(panelArray[panelArrayIndex]);
}
if(panelArrayIndex > 0){
if(panelArrayIndex % 8 == 0){
panelArray[panelArrayIndex].setBackground(beigeColor);
panelArray[panelArrayIndex].add(new JLabel("square"+panelArrayIndex));
board.add(panelArray[panelArrayIndex]);
}
if(panelArray[panelArrayIndex-1].getBackground().equals(tanColor)){
panelArray[panelArrayIndex].setBackground(beigeColor);
panelArray[panelArrayIndex].add(new JLabel("square"+panelArrayIndex));
board.add(panelArray[panelArrayIndex]);
}else{
panelArray[panelArrayIndex].setBackground(tanColor);
panelArray[panelArrayIndex].add(new JLabel("square"+panelArrayIndex));
board.add(panelArray[panelArrayIndex]);
}
}
}
}
这是正常的,我错过了一些非常明显的东西吗?
答案 0 :(得分:1)
从上面的评论:
您可以尝试在
之前将通话移至AddGridColors();
setSize(1024, 1024);
这可能是因为您在将所有元素添加到setVisible(true);
之前调用了JFrame
,因此会导致类似这样的问题。
setVisible(true);
应该是您计划的最后一行。
firstWordLowerCaseVariable
firstWordLowerCaseMethod()
FirstWordUpperCaseClass
ALL_WORDS_UPPER_CASE_CONSTANT
我这样说:
另外,你的for循环不应该是0到64而不是0到63吗?
因为您的for循环来自0-63
(不包括63
)
for(panelArrayIndex = 0; panelArrayIndex < 63; ++panelArrayIndex){
应该是:
for(panelArrayIndex = 0; panelArrayIndex < 64; ++panelArrayIndex){
或者
for(panelArrayIndex = 0; panelArrayIndex <= 63; ++panelArrayIndex){
但是你的面板阵列也应该这样(有63个元素,而不是64个元素):
JPanel[] panelArray = new JPanel[63];
应该是:
JPanel[] panelArray = new JPanel[64];