2015-09-26 15 views
5

私はJavaを学習するのにわずか6〜7週間しかないので、私のコードが怠けていたり、用語がオフであれば事前にお詫びします。私は乱数を作成し、正しい数を得るまでユーザーが推測できるプログラムを作成しようとしています。それは私のための学習経験以外の本当の目的を果たさない。Java - 数値ゲーム - 複数のActionListenerが同じクラスにあります

私は基本的なプログラムを動作させていますが、私はそれを改善し、経験を得るために他の要素を追加したいだけです。

プログラムはJFrameで実行され、ユーザーが推測を入力するためのJTextFieldがあります。 JTextFieldのActionListener設定があります。私は、ゲームの始めに表示されるスタートボタンを追加したいと思います。ユーザーが開始ボタンをクリックすると、JTextFieldがアクティブになります。また、ユーザーが正しい答えを推測すると、スタートボタンを使用してプログラムをリセットしたいと考えています。私はこれを成功させるためにいくつかの方法を実験しました。私はこれが同じクラスの複数のActionListenersを必要とすると考えています。私はこれが可能かどうかも分かりません。

ここに私のコードです。助けを前にありがとう。

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Random; 

public class JMyFrame2 extends JFrame implements ActionListener { 
    Random num = new Random(); 
    int computerGenerated = num.nextInt(1000); 
    public int userSelection; 
    JTextField numberField = new JTextField(10); 
    JLabel label1 = new JLabel(); 
    Container con = getContentPane(); 
    int previousGuess; 

    // constructor for JMyFrame 
    public JMyFrame2(String title) { 
     super(title); 
     setSize(750, 200); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     label1 = new JLabel(
       "I have a number between 1 and 1000 can you guess my number?" + "Please enter a number for your first guess and then hit Enter."); 

     setLayout(new FlowLayout()); 
     add(numberField); 
     add(label1); 
     System.out.println(computerGenerated); 

     numberField.addActionListener(this); 
    } 


    public void actionPerformed(ActionEvent e) { 
     userSelection = Integer.parseInt(numberField.getText()); 
     con.setBackground(Color.red); 

     if (userSelection == computerGenerated) { 
      label1.setText("You are correct"); 
      con.setBackground(Color.GREEN); 
     } else if (userSelection > computerGenerated) { 
      label1.setText("You are too high"); 
     } else if (userSelection < computerGenerated) { 
      label1.setText("You are too low"); 
     } 
    } 
} 


public class JavaProgram5 { 

    public static void main(String[] args) { 


     JMyFrame2 frame2 = new JMyFrame2("Assignment 5 - Number Guessing Game"); 
     frame2.setVisible(true); 
    } 
} 
+0

プログラムに「再起動」オプションを実装する方法はいくつかあります。どの部分に問題があるのか​​正確に説明できますか? –

答えて

5

確かに、複数のアクションリスナーを持つことができます。 実際、あなたのクラスはそれを実装すべきではありません。これにより

numberField.addActionListener(this); 

numberField.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      userSelection = Integer.parseInt(numberField.getText()); 
      con.setBackground(Color.red); 

      if (userSelection == computerGenerated) { 
       label1.setText("You are correct"); 
       con.setBackground(Color.GREEN); 
      } else if (userSelection > computerGenerated) { 
       label1.setText("You are too high"); 
      } else if (userSelection < computerGenerated) { 
       label1.setText("You are too low"); 
      } 
     } 
    }); 

はあなたが計画してスタートボタンに別のアクションリスナーを追加することができ、この行をactionPerformed方法、 を取り外して交換することにより

スタート匿名クラスを使用してこのパターンに続いて を追加します。 (これが匿名クラスである必要はありません、 これは証明するだけの単純なものでした。)

+0

助けてくれてありがとう! – Brent

4

ヤーノシュが言ったように、各ボタンにアクションリスナーを追加するとうまく仕事をしていませんが、大規模なコードで、あなたがする必要があるときそれはあまりにもきちんと見ていないボタンの多くを追加、私はあなたが、使い方は簡単です、あなたがやったようJFrameからActionListenerを実装しますが、各ボタンの後に追加し、作成しているJButtonのためsetActionCommand()を使用することをお勧め

button.addActionListener(this); 
button.setActionCommand("commandname") 

あなたはあなたの望むようにボタンを操作することができますこの関数は次のようになります。

@Override 
public void actionPerformed (ActionEvent e) { 
String cmd = e.getActionCommand(); 
switch(cmd) { 
    case "action1": 
     // Do something 
     break; 
    case "action2": 
     // Do something else 
     break; 
    case "potato": 
     // Give Mr. chips a high five 
     break; 
    default: 
     // Handle other cases 
     break; 
    } 
} 

というように、再び他のソリューションは、完全に正常に動作しますが、私は個人的にこの1つは、特にあなたが複数のアクションリスナーを持っているコードにたくさんすっきりと思います。

+0

私はこの解決策が大好きです。それはとてもシンプルで、私のような初心者でもそれに続くことができます。ありがとう! – Brent

+0

'if'文を' switch-case'で変更することさえできます。 – Frakcool

関連する問題