2016-05-25 4 views
0

私は最初のSwingアプリケーション - > Tic Tac Toeを作成しています。私は多くのチュートリアルを見たことがありますが、私はまだ3つのことを理解できません:

最初はです:方法を作成し、それらを私のコードで使用するにはどうすればいいですか?(私のコードではisWinnerメソッド)私はactionPerformedに追加しましたが、それでも何もしません。リアルタイムで動作させるにはどうすればいいですか?

2番目はです。私はstaticメソッドのファンではありません。クラスのオブジェクトを作成してからメソッドを呼び出す必要がありますか?

3番目はです。私のisWinnerメソッドは問題ありませんか?または、勝者が表示されているかどうかを確認しようとしている方法を変更する必要がありますか?

インターネット上で多くのコンテンツとそのようなゲームを作成する例を見ました。私が自分で見つけることができるかどうか尋ねることはありません。
お返事ありがとうございます!Swingアプリケーション内のメソッドの使用

EDIT 変更されたisWinnerメソッド。今私はそれをactionPerformedメソッドから呼び出します。まだ何もしません...

package one.more.time; 

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

@SuppressWarnings("serial") 
public class GameWindow extends JFrame implements ActionListener{ 

    String player = "X"; 
    JButton but[] = new JButton[9]; 
    JLabel status = new JLabel("Start!"); 


    public GameWindow() { 
     setLayout(new BorderLayout()); 

     for (int i = 0; i < but.length; i++){ 
      but[i] = new JButton(Integer.toString(i+1)); 
      but[i].addActionListener(this); 
     } 

     JPanel gamePanel = new JPanel(); 
     gamePanel.setLayout(new GridLayout(3, 3)); 

     for (int i = 0; i < but.length; i++){ 
      gamePanel.add(but[i]); 
     } 

     add(gamePanel, BorderLayout.CENTER); 
     add(status, BorderLayout.SOUTH); 
     setSize(new Dimension(300, 300)); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 



    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new GameWindow(); 
      } 
     }); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     JButton src = (JButton) e.getSource(); 
     src.setActionCommand("player"); 
     src.setText(player); 
     src.setEnabled(false); 
     if (isWinner(but, player)) { 
      System.exit(0); 
     }; 
    } 

    boolean isWinner(JButton butt[], String player){ 
     JButton but[] = butt; 
     for (int i = 0; i<3; i++){ 
     if (but[i].getActionCommand().equals(but[i+3].getActionCommand()) && 
        but[i+3].getActionCommand().equals(but[i+6].getActionCommand()) && 
        but[i].getActionCommand().equals(but[i+6].getActionCommand()) && 
        but[i].getActionCommand().equals(player)) 
      { 
       return true; 
      } 
     } 
     for (int i = 0; i<9; i+=3) 
     if (but[i].getActionCommand().equals(but[i+1].getActionCommand()) && 
        but[i+1].getActionCommand().equals(but[i+2].getActionCommand()) && 
        but[i].getActionCommand().equals(but[i+2].getActionCommand()) && 
        but[i].getActionCommand().equals(player)) 
      { 
       return true; 
      } 

     if (but[0].getActionCommand().equals(but[4].getActionCommand()) && 
       but[4].getActionCommand().equals(but[8].getActionCommand())&& 
       but[0].getActionCommand().equals(but[8].getActionCommand()) && 
       but[0].getActionCommand().equals(player)) 
     { 
      return true; 
     } 
     if (but[2].getActionCommand().equals(but[4].getActionCommand()) && 
       but[4].getActionCommand().equals(but[6].getActionCommand()) && 
       but[2].getActionCommand().equals(but[6].getActionCommand()) && 
       but[2].getActionCommand().equals(player)) 
     { 
      return true; 
     } 

     return false; 
    } 

}

+0

あなたはボタンの内容を比較するのではなく、ボタンの内容を比較する必要があります。この方法は、あなたのメソッドが静的である理由、私は表示されません。また –

+0

動作しない、あなたはちょうど私がちょうどコードを編集した他のJavaアプリケーション –

答えて

2

1-2。静かにしないでください。そうすれば、actionPerformedメソッドなど他の静的でないメソッドからクラス内から呼び出すことができます。

  1. but [I]==but [I+3] - 常に違うJButtonの参照を比較するだけです。

    が、[I] .getActionCommand().equals(ただし、[I + 3] .getActionCommand());:あなたはマークされ、それらの背後にあるプレーヤーを比較する必要があります

編集: actionPerformedメソッド内src.setActionCommand("player");は、プレイヤーの実際の値と、もちろん、それを交換して書き込みをしないでくださいsrc.setActionCommand(player);

A少しクリーナーisWinner方法:おそらく

boolean isWinner(JButton buttons[], String player) 
{ 
    for (int i = 0; i < 3; i++) 
    { 
     if (buttons[i].getActionCommand().equals(player) && 
       buttons[i + 3].getActionCommand().equals(player) && 
       buttons[i + 6].getActionCommand().equals(player)) 
     { 
      return true; 
     } 
    } 

    for (int i = 0; i < 9; i += 3) 
     if (buttons[i].getActionCommand().equals(player) && 
       buttons[i + 1].getActionCommand().equals(player) && 
       buttons[i + 2].getActionCommand().equals(player)) 
     { 
      return true; 
     } 

    if (buttons[0].getActionCommand().equals(player) && 
      buttons[4].getActionCommand().equals(player) && 
      buttons[8].getActionCommand().equals(player)) 
    { 
     return true; 
    } 

    return buttons[2].getActionCommand().equals(player) && 
      buttons[4].getActionCommand().equals(player) && 
      buttons[6].getActionCommand().equals(player); 
} 
+0

のようなSwingアプリケーションで、あなたのメソッドを呼び出すことができる理由です。あなたが見て1つのより多くの時間がかかることができれば、それは素晴らしい:) – Burdzi0

+0

私の答えの下で編集を参照してくださいだろう – aviad

関連する問題