2016-08-13 16 views
0

だから、私はnetbeans 8.1とjavaを使ってTicTacToeプログラムをプログラムしようとしている6年生です。

これは私のコードは、(私は一つだけ、ボタンのコードを含めました簡略化のために)これまでです:Java-「JButtonが無効になっている場合は___」

public class TicTacToe extends JFrame{ 
    static Random computerGenerate = new Random(); 
    static int rounds = 0; 
    static JPanel panel = new JPanel(); 
    static JButton s1 = new JButton(); 
    public static void main(String[] args) { 
     Gui(); 
    } 
    public static void Gui() { 
     JFrame Gui = new JFrame("TicTacToe"); 
     Gui.setVisible(true); 
     Gui.setResizable(false); 
     Gui.setSize(320, 340); 
     Gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     panel.setLayout(null); 
     Gui.add(panel); 
     s1.setBounds(0, 0, 100, 100); 
     s1.setFont(new Font("Times New Roman", Font.PLAIN, 50)); 
     s1.addActionListener(new Response()); 
     panel.add(s1); 
    } 
    private static class Response extends TicTacToe implements ActionListener { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      if (e.getSource() == tictactoe.TicTacToe.s1) { 
       s1.setText("X"); 
       s1.setEnabled(false); 
       rounds += 1; 
      } 
     } 
    } 
    public static void Moves() { 
     if (rounds == 1) { 
      int computerStartPos = 1 + computerGenerate.nextInt(8); 
      switch (computerStartPos) { 
       case 1: 
        if (button"s1" is disabled)) { 
         computer will generate a new starting position for the AI 
        } else { 
         button s1 will be disabled and it will show a "O" to show the computer has selected the square 
        } 
        break; 
      } 
     } 
    } 
} 

、メソッドの移動は非常に最後の方法であると私は問題を抱えているセクション()。

私がしようとしていることは、プレイヤーが最初の四角形を選択した後で、コンピュータは番号を生成して、それ自身の開始位置を決定します。

問題は、プレイヤーがコンピュータの前にすでにそのボタンを選択していた場合、新しい番号を開始点として再生成する必要があることです。

これを解決する私の考えは、「s1.setEnabled()がfalseの場合、コンピュータは新しい開始位置に対応する新しい番号を再生成します」ということです。

これは書き込み可能ですか?これはほんのわずかなプロジェクトですが、私は助けていただければ幸いです。

ああ、私は間違ってJavaで静的を使用していると言われているが、コードに「静的」を含めていないと、すべてのコードが赤いエラーのようなものになるまで数日間エラーが出る!!! !理由を知っている人、または正しく使用する方法を説明できる人は、次のようにしてください。D

私が受け取った助けを感謝します。

+0

まず、 'Javaの静的メソッドはクラスに属しています(そのインスタンスではありません)。それらはインスタンス変数を使用せず、通常はパラメータから入力を受け取り、その上でアクションを実行してから何らかの結果を返します。 '第二に、あなたはそれを確認することができます。 'if(!isEnabled()){...}'有効かどうかをチェックする条件の先頭に '!'があることを覚えておいてください! – Smit

+0

静的エラーを取り除く方法:オブジェクト指向プログラミングの概念を学び、それらを使用します。多くのチュートリアルがあり、簡単に見つけられます。主な静的メソッドからコードの大部分を取り出して、代わりにオブジェクトを作成して使用したいと思うでしょう。 –

+0

Oh @HovercraftFullOfEels。警告ありがとう!次回は気をつけてください – Smit

答えて

1

ボタンを使用すると、非静的フィールドをstatic参照できません...

if (button.isEnabled()) { 

}else {} 

if I don't include "static" in the code netbeans gives me errors for days until all of my code is like RED ERROR!!

有効にするかどうかをチェックするためのmethodがあります...

静的なものを使用せずにインスタンスを作成してみてください...

あなたは、開始点として使用することができます。

は、フィールドから静的なキーワードを削除するコンストラクタを定義し、mainメソッドでインスタンスを作成します。..このような

// YOU NEED A CONSTRUCTOR 
public TicTacToe() { 
computerGenerate = new Random(); 
panel = new JPanel(); 
s1 = new JButton(); 
} 

public static void main(String[] args) { 
TicTacToe demoExample = new TicTacToe(); 

demoExample.Gui(); 
} 
+0

これはおそらく、モデルとビューとの間の循環依存関係を避けるべきです。ボタンを無効にする唯一の効果は、ボタンを無効にすることだけです。 –

0

Static methods in java belong to the class (not an instance of it). They use no instance variables and will usually take input from the parameters, perform actions on it, then return some result

第二に、あなたはそれを確認することができます。

if(! s1.isEnabled()) 
{ 
    ... 
} 

有効かどうかをチェックする条件の開始時に!あります忘れないでください!

関連する問題