2017-10-20 167 views
0

呃,我不太清楚發生了什麼......對於我來說,我甚至都沒有嘗試過從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

回答

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){ 

但同樣要去爲你的小組的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

相關問題