gpt4 book ai didi

java - JFrame 窗口在每次编译时都会调整大小。每次都有不同的结果

转载 作者:行者123 更新时间:2023-12-02 12:06:47 25 4
gpt4 key购买 nike

呃,我不太确定发生了什么...在我的一生中,我什至在从 IDE 连续运行应用程序几次后都没有尝试过调试。我决定直接过来解释一下我认为奇怪的地方。

我正在尝试创建一个带有棕褐色和米色正方形的棋盘,我有一个 JFrame 窗口大小设置为 1024x1024,所以是一个正方形。我还使用 8x8 的 gridLayout。

每次运行应用程序时,我可能会得到一个 6x8 的网格,下一次运行 5x8,或者下一个 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]);
}
}
}
}

这正常吗?我是否遗漏了一些非常明显的东西?

最佳答案

来 self 的上述评论:

Could you try moving the call to AddGridColors(); right before setSize(1024, 1024);

这可能是因为您在将所有元素添加到 JFrame 之前调用了 setVisible(true);,因此导致了类似这样的问题。

setVisible(true); 应该是程序的最后一行。

顺便说一句,请遵循Java naming conventions

  • firstWordLowerCaseVariable
  • firstWordLowerCaseMethod()
  • FirstWordUpperCaseClass
  • ALL_WORDS_UPPER_CASE_CONSTANT

我是这么说的:

Also, shouldn't your for-loop be from 0 to 64 instead of 0 to 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];

关于java - JFrame 窗口在每次编译时都会调整大小。每次都有不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46850573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com