2017-10-20 17 views
0

Erm、私は何が起こっているのか分かりません...私の人生のために、私はIDEから連続して複数回アプリケーションを実行した後も試したりデバッグしたりしませんでした。私はここにまっすぐ来て、私が奇妙であると考えるものを説明することにしました。すべてのコンパイル時にJFrameウィンドウのサイズが変更されます。毎回異なる結果が出る

私はタンとベージュの四角でチェス盤を作成しようとしていますが、1024x1024に設定されたJFrameウィンドウは正方形になっています。私も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]); 
      } 
     } 
    } 
} 

これは正常ですか、わかりやすいものがありますか?

はあなたがにすべての要素を追加した前に、あなたがsetVisible(true);を呼び出しているので、これは可能性があり、右setSize(1024, 1024);

AddGridColors();への呼び出しを移動してみでした:私の上記のコメントから

+1

「* **私もしようとしなかった私の人生とデバッグ**のためのアプリケーションを実行した後rray(63個の要素ではなく、64があります) IDEから複数回連続して実行されます。私はここにまっすぐに来て、私が奇妙であると思うものを説明することにしました* " - クールではない..デバッグに行きましょうデバッグのヘルプを実際にはここではオフトピックとみなしています。 –

+0

'setSize(1024、1024);の直前に' AddGridColors(); 'を呼び出そうとしてもいいですか?それが助けになるなら、何が起こっているのか説明できます。 -loopは0から63ではなく0から64? – Frakcool

+0

また、 'public class ChessBoardはJFrame {'と 'private final JFrame board = new JFrame();'を拡張しています。理由はありません。 – Ansharja

答えて

1

JFrameとなり、このような問題が発生します。

setVisible(true);は、プログラムの最後の行にする必要があります。

ところで、私はこれを言っJava naming conventions

  • firstWordLowerCaseVariable
  • firstWordLowerCaseMethod()
  • FirstWordUpperCaseClass
  • ALL_WORDS_UPPER_CASE_CONSTANT

に従ってください

また、for-loopは0〜63ではなく0〜64であるべきですか?

for(panelArrayIndex = 0; panelArrayIndex < 63; ++panelArrayIndex){ 

は、いずれかでなければなりません(63含めず)0-63から起こっているあなたのためのループなので:

for(panelArrayIndex = 0; panelArrayIndex < 64; ++panelArrayIndex){ 

それとも

for(panelArrayIndex = 0; panelArrayIndex <= 63; ++panelArrayIndex){ 

しかし、同じはずですあなたのパネルのために行く

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

関連する問題