私は最初の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;
}
}
あなたはボタンの内容を比較するのではなく、ボタンの内容を比較する必要があります。この方法は、あなたのメソッドが静的である理由、私は表示されません。また –
動作しない、あなたはちょうど私がちょうどコードを編集した他のJavaアプリケーション –