2016-12-09 5 views
0

現在、Java GUIでTic Tac Toeのシンプルなバージョンをコーディングしています。私は競技場の設定に問題があります。ボタンは、プレーヤーが「X」または「O」のいずれかを押すことができる正方形を表します。Tic Tac Toe Java GUIセットアッププレイフィールド

//Playing field class 

import java.awt.*; 
import java.awt.BorderLayout; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import java.awt.Color; 
class TicTacToeFrame extends JFrame { 
    private JFrame game = new JFrame("Tic Tac Toe"); 
    private JPanel pane1, pane2, pane3; 
    Button button = new Button(); 
    public TicTacToeFrame() { 
     game.setSize(300, 300); 
     game.setVisible(true); 
     game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     pane1 = new JPanel(); 
     pane2 = new JPanel(); 
     pane3 = new JPanel(); 

     add(pane1, BorderLayout.NORTH); 
     add(pane2, BorderLayout.CENTER); 
     add(pane3, BorderLayout.SOUTH); 

     pane1.setBackground(Color.white); 
     pane2.setBackground(Color.white); 
     pane3.setBackground(Color.white); 

     placeButton(); 
    } 
    public void placeButton() { 
     for (int i = 1; i < 10; i++) { 
      if (i < 4) { 
       pane1.add(button.getButton()); 
      } 
      else if (3 < i && i < 7) { 
       pane2.add(button.getButton()); 
      } 
      else if (6 < i && i < 10) { 
       pane3.add(button.getButton()); 
      } 
     } 
    } 
} 

//Button class 

import javax.swing.JButton; 
import java.awt.event.ActionListener; 
public class Button { 
    private JButton button; 
    private int number = 0; 
    private String player; 
    public Button() { 
     button = new JButton(); 
    } 
    public String getPlayer() { 
     return player; 
    } 
    public JButton getButton() { 
     return button; 
    } 
    public void changePlayer() { 
     for (int i = 1; i < 10; i++) { 
       if (number % 2 == 0) { 
        player = "X"; 
       } 
       else { 
        player = "O"; 
       } 
       number++; 
     } 
    } 
} 

私がメインでプログラムを実行すると、フレームを受信すると、正方形を表すはずのボタンが配置されません。助けて?

+0

あなたが追加した後のペインを追加フレームを再描画してみてください。 –

+1

'getButton()'を呼び出すだけで、グリッド全体に** ** ** ** JButtonを追加するだけです。その1つのボタンを返します。それを必要とする各スポットに対して新しいJButtonを作成する必要がありますが、これは実行していません。 –

+0

@HovercraftFullOfEels * "JButtonをグリッド全体に1つだけ追加しています" * Hombreを閉じるが、sombreroはありません。 'Button Button = new Button();' OP: 'JButton button = new JButton();'(ただし、9つのボタンを使用します。 **編集:** D'Oh! OPに 'JButton'を拡張したクラス' Button'があることを認識していませんでした。 :P OP:カスタムクラスに既存のクラスの名前を使用しないもう一つの理由。 –

答えて

3

なぜJFrameを既に拡張しているクラスの中にJFrame(ゲーム)をラップするのですか?

私はこのようにそれを行うだろう

public TicTacToeFrame() { 
    super("Tic Tac Toe"); 
    //I prefer to call pack() method in this case.. 
    //setSize(300, 300); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    pane1 = new JPanel(); 
    pane2 = new JPanel(); 
    pane3 = new JPanel(); 

    add(pane1, BorderLayout.NORTH); 
    add(pane2, BorderLayout.CENTER); 
    add(pane3, BorderLayout.SOUTH); 

    pane1.setBackground(Color.white); 
    pane2.setBackground(Color.white); 
    pane3.setBackground(Color.white); 

    placeButton(); 
    //call setVisible after you added all the buttons 
    setVisible(true); 
    pack(); 
} 

ミスは(ウナギのホバークラフト完全に気づかされる)placeButton方法でもあります:

public void placeButton() { 
    for (int i = 1; i < 10; i++) { 
     //You should create the button all the time 
     Button button = new Button(); 
     if (i < 4) { 
      pane1.add(button.getButton()); 
     } 
     else if (3 < i && i < 7) { 
      pane2.add(button.getButton()); 
     } 
     else if (6 < i && i < 10) { 
      pane3.add(button.getButton()); 
     } 
    } 
}