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

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

问题描述:

呃,我不太清楚发生了什么......对于我来说,我甚至都没有尝试过从IDE中连续运行几次应用程序进行调试。我决定直接来这里解释一下我认为的奇怪。JFrame窗口在每次编译时调整大小。每次都有不同的结果

我想创建一个棕褐色和米色方块的棋盘,我有一个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

“*对于我的生活**我甚至没有尝试和调试**运行该应用程序后,从IDE连续几次。我决定直接来这里解释一下我认为很奇怪的东西*“ - 不是很酷......去调​​试,要求调试帮助实际上被认为是脱离主题,我们不是一个错误查找服务 - 这就是调试器 –

+0

你可以试着将调用移动到'AddGridColors();'setSize(1024,1024)之前;'?如果有帮助,让我知道,这样我就可以解释发生了什么。 -loop是从0到64而不是0到63? – Frakcool

+0

此外'公共类ChessBoard扩展JFrame {'和'私有final JFrame board = new JFrame();'没有意义,你没有任何扩展'JFrame'原因 – Ansharja

从我上面的评论:

你能尝试移动调用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){ 

但同样要去为你的小组的a rray(有63种元素,不是64):

JPanel[] panelArray = new JPanel[63]; 

应该是:

JPanel[] panelArray = new JPanel[64]; 
+0

欢呼你所有的帮助! – MYLESMAN

+0

如果这个答案解决了你的问题,请确保[接受它](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work),所以其他人知道这个问题已经解决了。 – Frakcool

+0

嗯,我有更多的问题,但现在已经够了。 – MYLESMAN