-3

GUI を使って数学クイズ プログラムを作成しています。これは私のコードです。私の問題は次のとおりです。

  1. JButton Nextが押された場合に別の質問を表示する方法。
  2. Next答えが正しい場合にのみボタンを機能させるにはどうすればよいですか? (次の問題に進む前に、正しく答える必要があることを意味します)。

誰か助けてください、ありがとう。

public class MathQuiz extends JFrame{

    JButton jbtNum1, jbtNum2, jbtNum3, jbtNum4, jbtNum5, jbtNum6, jbtNum7, jbtNum8, jbtNum9, jbtNum10, jbtNum11, jbtNum12, jbtNum13, jbtNum14, jbtNum15, jbtNum16, jbtNum17, jbtNum18, jbtNum19, jbtNum20;
    JButton jbtConfirm;
    JButton jbtNext;
    JTextField jtfAnswer = new JTextField();
    int a = (int)((Math.random())*10);
    int b = (int)((Math.random())*10);

    public MathQuiz(){

        JPanel p1 = new JPanel();
        p1.setLayout(new GridLayout(4,4,1,1));

            p1.add(jbtNum1 = new JButton("10"));
            p1.add(jbtNum2 = new JButton("7"));
            p1.add(jbtNum3 = new JButton("2"));
            p1.add(jbtNum4 = new JButton("18"));
            p1.add(jbtNum5 = new JButton("6"));
            p1.add(jbtNum6 = new JButton("11"));
            p1.add(jbtNum7 = new JButton("14"));
            p1.add(jbtNum8 = new JButton("1"));
            p1.add(jbtNum9 = new JButton("9"));
            p1.add(jbtNum10 = new JButton("3"));
            p1.add(jbtNum11 = new JButton("16"));
            p1.add(jbtNum12 = new JButton("17"));
            p1.add(jbtNum13 = new JButton("8"));
            p1.add(jbtNum14 = new JButton("15"));
            p1.add(jbtNum15 = new JButton("13"));
            p1.add(jbtNum16 = new JButton("5"));
            p1.add(jbtNum17 = new JButton("20"));
            p1.add(jbtNum18 = new JButton("12"));
            p1.add(jbtNum19 = new JButton("19"));
            p1.add(jbtNum20 = new JButton("4"));

        JPanel p2 = new JPanel(new GridLayout(1,5));

        p2.add(new JLabel(" " + a));
        p2.add(new JLabel(" + "));
        p2.add(new JLabel(" " + b));
        p2.add(new JLabel(" = "));
        p2.add(jtfAnswer);
        jtfAnswer.setEditable(false);
        p2.add(jbtConfirm = new JButton("Confirm"));
        p2.add(jbtNext = new JButton("Next"));

        setLayout(new GridLayout(3,1,50,50));
        add(p1);
        add(p2);

        jbtNum1.addActionListener(new ListenToButton());
        jbtNum2.addActionListener(new ListenToButton());
        jbtNum3.addActionListener(new ListenToButton());
        jbtNum4.addActionListener(new ListenToButton());
        jbtNum5.addActionListener(new ListenToButton());
        jbtNum6.addActionListener(new ListenToButton());
        jbtNum7.addActionListener(new ListenToButton());
        jbtNum8.addActionListener(new ListenToButton());
        jbtNum9.addActionListener(new ListenToButton());
        jbtNum10.addActionListener(new ListenToButton());
        jbtNum11.addActionListener(new ListenToButton());
        jbtNum12.addActionListener(new ListenToButton());
        jbtNum13.addActionListener(new ListenToButton());
        jbtNum14.addActionListener(new ListenToButton());
        jbtNum15.addActionListener(new ListenToButton());
        jbtNum16.addActionListener(new ListenToButton());
        jbtNum17.addActionListener(new ListenToButton());
        jbtNum18.addActionListener(new ListenToButton());
        jbtNum19.addActionListener(new ListenToButton());
        jbtNum20.addActionListener(new ListenToButton());
        jbtConfirm.addActionListener(new ListenToConfirm());
    }

    class ListenToButton implements ActionListener{
        public void actionPerformed(ActionEvent e){
            if(e.getSource() == jbtNum1)
                jtfAnswer.setText(jbtNum1.getText());
            else if(e.getSource() == jbtNum2)
                jtfAnswer.setText(jbtNum2.getText());
            else if(e.getSource() == jbtNum3)
                jtfAnswer.setText(jbtNum3.getText());
            else if(e.getSource() == jbtNum4)
                jtfAnswer.setText(jbtNum4.getText());
            else if(e.getSource() == jbtNum5)
                jtfAnswer.setText(jbtNum5.getText());
            else if(e.getSource() == jbtNum6)
                jtfAnswer.setText(jbtNum6.getText());
            else if(e.getSource() == jbtNum7)
                jtfAnswer.setText(jbtNum7.getText());
            else if(e.getSource() == jbtNum8)
                jtfAnswer.setText(jbtNum8.getText());
            else if(e.getSource() == jbtNum9)
                jtfAnswer.setText(jbtNum9.getText());
            else if(e.getSource() == jbtNum10)
                jtfAnswer.setText(jbtNum10.getText());
            else if(e.getSource() == jbtNum11)
                jtfAnswer.setText(jbtNum11.getText());
            else if(e.getSource() == jbtNum12)
                jtfAnswer.setText(jbtNum12.getText());
            else if(e.getSource() == jbtNum13)
                jtfAnswer.setText(jbtNum13.getText());
            else if(e.getSource() == jbtNum14)
                jtfAnswer.setText(jbtNum14.getText());
            else if(e.getSource() == jbtNum15)
                jtfAnswer.setText(jbtNum15.getText());
            else if(e.getSource() == jbtNum16)
                jtfAnswer.setText(jbtNum16.getText());
            else if(e.getSource() == jbtNum17)
                jtfAnswer.setText(jbtNum17.getText());
            else if(e.getSource() == jbtNum18)
                jtfAnswer.setText(jbtNum18.getText());
            else if(e.getSource() == jbtNum19)
                jtfAnswer.setText(jbtNum19.getText());
            else if(e.getSource() == jbtNum20)
                jtfAnswer.setText(jbtNum20.getText());
        }
    }

    class ListenToConfirm implements ActionListener{
        public void actionPerformed(ActionEvent e){
            int answer = a + b;
            int guessAnswer = Integer.parseInt(jtfAnswer.getText());

            if(guessAnswer == answer)
                jtfAnswer.setText("Correct");
            else
                jtfAnswer.setText("Wrong! Try Again.");
        }
    }

    public static void main(String[] args){
        MathQuiz frame = new MathQuiz();
        frame.setTitle("Math Quiz");
        frame.setSize(700,500);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
4

2 に答える 2

3
  1. 4 つの JLabels を使用する代わりに、1 つだけを使用して、答えが正しく、別の質問を表示したい場合に、JLabel で setText() メソッドを呼び出すことができます。

    JLabel question = new JLabel("最初の質問");

  2. JButton を作成するときは、それを無効にします。

作成時にボタンを無効にします。

    jbtNext = new JButton("Next");
    jbtNext.setEnabled(false);// button is initially disabled

確認ボタンの ActionListener で

   if(guessAnswer == answer){
        jtfAnswer.setText("Correct"); 
        jbtNext.setEnabled(true);
   }else 
       jtfAnswer.setText("Wrong! Try Again."); 

「次へ」ボタンにも ActionListener を追加する必要があります。

jbtNext.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
      question.setText("Your next question");// change the question text
      jbtNext.setEnabled(false);// disable again until the next correct answer
    }
  });
于 2012-05-24T17:55:49.310 に答える
3

問題 1 を解決するには、 を使用しますCardLayout。問題 2 を解決するには、単純なifステートメントを使用します。

于 2012-05-24T15:17:57.787 に答える