Как использовать JButton в Java - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь создать игру палача, используя класс Swing и класс Graphics для класса APCS, который у меня есть.

Я создал JButton, который будет принимать введенное пользователем предположение и либо добавлять его в «пропуски», либо заполнять все соответствующие буквы в слове.У меня есть отдельный текстовый файл, из которого я выбираю случайное слово.

Когда я запускаю программу, все компоненты отображаются, но кнопка ничего не делает.Я работал над этим в течение нескольких дней и не знаю, что я делаю неправильно.Я только недавно узнал, как использовать класс Swing, так что, насколько я знаю, это может быть глупой ошибкой.Я поместил весь код ниже.

public class Hangman extends JFrame {

    DrawPanel panel = new DrawPanel();
    Graphics g = panel.getGraphics();
    JTextField guess;
    JTextField outputWord;
    JTextField missesString;
    boolean play;
    JButton button = new JButton();
    String output = "";
    String word;
    int misses = 0;

    public Hangman() {
        int again = 0;
        String[] dictionary = new String[1000];
        In words = new In("words.txt");
        JFrame app = new JFrame();
        app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        app.setVisible(true);

        app.setSize(500, 500);

        for (int i = 0; i < 1000; i++) {
            dictionary[i] = words.readLine();
        }
        do {
            int num = (int) (Math.random() * 1000);
            word = dictionary[num].toLowerCase();
            String answer = word;
            word = "";
            for (int i = answer.length(); i > 0; i--) {
                word = word + "*";
            }
            int length = answer.length();
            app.setLayout(new BorderLayout());
            JLabel letter = new JLabel();
            letter.setFont(new Font("Arial", Font.BOLD, 20));
            letter.setText("Enter Your guess");
            guess = new JTextField(10);

            JLabel output = new JLabel();
            output.setFont(new Font("Arial", Font.BOLD, 20));
            output.setText("The Word is");
            outputWord = new JTextField(30);
            outputWord.setText(word);
            outputWord.setEditable(false);

            JLabel misses = new JLabel();
            misses.setFont(new Font("Arial", Font.BOLD, 20));
            misses.setText("Misses:");
            missesString = new JTextField(52);
            missesString.setEditable(false);

            button = new JButton("Guess");
            button.addActionListener(new ButtonListener());

            JPanel panels = new JPanel();
            panels.setLayout(new BorderLayout());

            JPanel panel1 = new JPanel();
            panel1.add(letter);
            panel1.add(guess);
            panel1.add(button);

            JPanel panel2 = new JPanel();
            panel2.add(output);
            panel2.add(outputWord);

            JPanel panel3 = new JPanel();
            panel3.add(misses);
            panel3.add(missesString);

            app.add(panel1, BorderLayout.NORTH);
            app.add(panel2, BorderLayout.EAST);
            app.add(panel3, BorderLayout.SOUTH);

            app.add(panels);

            app.setVisible(true);

            again = JOptionPane.showConfirmDialog(null, "Do you want to play again?");
        } while (again == JOptionPane.YES_OPTION);

    }



    private class ButtonListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == guess) {
                output = "";
            }
            for (int i = 0; i <= word.length() - 1; i++) {
                if (guess.getText().equalsIgnoreCase(word.substring(i, i + 1))) {
                    output = output.substring(0, i) + guess + output.substring(i + 1, word.length() - 1);
                    outputWord.setText(output);
                } else {
                    misses++;
                    missesString.setText(missesString.getText() + guess + " ");
                }
            }
        }
    }
}

Компоненты отлично отображаются на экране, только кнопка доставляет мне затруднения из-за неправильной работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...