WindowBuilder, как использовать другую кнопку для отображения счетчика - PullRequest
0 голосов
/ 28 января 2020

У меня есть программа, которую я создаю в Windowbuilder, используя Eclipse. Я хочу, чтобы программа генерировала случайное число, и пользователь должен был бы угадать, четное оно или нечетное. Я уже создал игру на основе командной строки, но я пытаюсь сделать это с GUI. Единственная проблема, с которой я столкнулся, - это когда я хочу закончить игру и позволить пользователю увидеть свой результат с помощью кнопки выхода. Однако, когда я пытаюсь показать окончательную оценку того, сколько раз они получили это правильно и неправильно, я не могу, потому что это другим способом. Поэтому я хочу отдельную кнопку при нажатии, чтобы отобразить общее правильное и неправильное. Это код:

 import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JLabel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Random;
public class RandomNumber {

    private JFrame frame;
    private JTextField textFieldMe;
    private JTextField textFieldCpu;
    private JTextField textFieldScore;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    RandomNumber window = new RandomNumber();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public RandomNumber() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */

    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        textFieldMe = new JTextField();
        textFieldMe.setBounds(152, 62, 86, 20);
        frame.getContentPane().add(textFieldMe);
        textFieldMe.setColumns(10);

        textFieldCpu = new JTextField();
        textFieldCpu.setBounds(152, 118, 86, 20);
        frame.getContentPane().add(textFieldCpu);
        textFieldCpu.setColumns(10);

        textFieldScore = new JTextField();
        textFieldScore.setBounds(152, 217, 86, 20);
        frame.getContentPane().add(textFieldScore);
        textFieldScore.setColumns(10);

        JButton btnGo = new JButton("GO!");/* this is the start button*/
        btnGo.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Random rand = new Random();
                int correctCount = 0;
                int incorrectCount = 0;

                int ran = rand.nextInt(50) + 1;
                String me = textFieldMe.getText();
                if (ran % 2 == 0 && me.equals("e") || ran % 2 != 0 && me.equals("o")){
                    correctCount++;
                }else if (ran % 2 == 0 && me.equals("o") || ran % 2 != 0 && me.equals("e")){
                    incorrectCount++;
                }

                textFieldCpu.setText(Integer.toString(ran));

                int totalRight = correctCount;
                int totalWrong = incorrectCount;
                String right = Integer.toString(totalRight);
                String wrong = Integer.toString(totalWrong);


            }
        });
        btnGo.setBounds(149, 149, 89, 23);
        frame.getContentPane().add(btnGo);

        JButton btnQuit = new JButton("Quit"); /* i want this button to display the score*/
        btnQuit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                String right = Integer.toString(totalRight);
                String wrong = Integer.toString(totalWrong);

                textFieldScore.setText("Correct & wrong: " + right + wrong ); 
            }
        });
        btnQuit.setBounds(321, 216, 89, 23);
        frame.getContentPane().add(btnQuit);

        JLabel lblNewLabel = new JLabel("Your Number");
        lblNewLabel.setBounds(167, 36, 135, 14);
        frame.getContentPane().add(lblNewLabel);

        JLabel lblNewLabel_1 = new JLabel("CPU Guess");
        lblNewLabel_1.setBounds(162, 93, 71, 14);
        frame.getContentPane().add(lblNewLabel_1);

        JLabel lblScore = new JLabel("Score");
        lblScore.setBounds(179, 192, 46, 14);
        frame.getContentPane().add(lblScore);
    }
}

1 Ответ

0 голосов
/ 28 января 2020

Я бы попытался сделать right и wrong видимыми для каждого метода, преобразовав их в переменную вашего класса. Новый класс будет выглядеть примерно так:

public class RandomNumber {
  ...
  private int right, wrong;
  ...
  private void initialize() {
    ...
    btnGo.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        Random rand = new Random();
        int ran = rand.nextInt(50) + 1;

        String me = textFieldMe.getText();
        if (ran % 2 == 0 && me.equals("e") || ran % 2 != 0 && me.equals("o")){
          ++right;
        }else if (ran % 2 == 0 && me.equals("o") || ran % 2 != 0 && me.equals("e")){
          ++wrong;
        }

        textFieldCpu.setText("" + ran);
      }
    }
    ...
    btnQuit.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        textFieldScore.setText("Correct : " + right + " Wrong: " wrong );
        //will automatically convert ints to String
      }
    }
    ...
  }
  ...
}
...