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

时间:2017-10-20 13:51:04

标签: java swing jframe

嗯,我不太确定发生了什么......对于我的生活,我甚至没有在从IDE连续运行应用程序几次后尝试调试。我决定直奔这里解释我认为奇怪的事情。

我正在尝试创建一个棕褐色和米色方块的棋盘,我的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]);
            }
        }
    }
}

这是正常的,我错过了一些非常明显的东西吗?

1 个答案:

答案 0 :(得分:1)

从上面的评论:

  

您可以尝试在AddGridColors();

之前将通话移至setSize(1024, 1024);

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

setVisible(true);应该是您计划的最后一行。

请按照Java naming conventions

进行操作
  • 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];