Нажатие кнопки GUI, которая выбирает случайное слово из массива и помещает его в JLabel - PullRequest
1 голос
/ 30 апреля 2019

У меня вопрос по этому GUI коду.Как отобразить на JLabel случайные слова?

По сути, целью этой программы является создание кнопки GUI , которая при нажатии выбирает случайное слово из массива и помещает егов JLabel.

У меня возникли проблемы с отображением слов на JLabel, я не совсем уверен, как это сделать.

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class GuiQuiz {
    public static void main(String[] args) {

        JFrame frame = new JFrame("Button Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel mainPanel = new JPanel();
        mainPanel.setBackground(Color.BLUE);
        mainPanel.setPreferredSize(new Dimension(500, 500));

        JPanel subPanel1 = new JPanel();
        subPanel1.setBackground(new Color(134, 179, 0));
        subPanel1.setPreferredSize(new Dimension(150, 100));
        subPanel1.add(new JLabel("Random word here"));

        String[] names = { "Class", "Charger", "Pencil", "Dog", "Robot", "Ninja", "Teacher", "Video", "Book",
            "Computer" };


        JButton button = new JButton("Generates a random word");

        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String name = names[(int) (Math.random() * names.length)]; 
                ((JButton) e.getSource()).setText(name);
            }
        });

        mainPanel.add(button);
        mainPanel.add(subPanel1);


        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setVisible(true);
    }

}

1 Ответ

1 голос
/ 30 апреля 2019
  1. Вы объявляете анонимный JLabel при написании:

    subPanel1.add(new JLabel("Random word here"));
    

    Вам необходимо установить его в переменную:

    JLabel label = new JLabel("Random word here");
    subPanel1.add(label);
    
  2. Прямо сейчас у вас есть button свой собственный ActionListener:

    button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            String name = names[(int) (Math.random() * names.length)]; 
            ((JButton) e.getSource()).setText(name);
        }
    });
    

    И вы устанавливаете текст JButton, а не метку, поэтому нам нужно изменитьэто как:

    button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            String name = names[(int) (Math.random() * names.length)]; 
            label.setText(name);
        }
    });
    

Это должно делать то, что вы пытаетесь сделать, я не пробовал, но это работает в моей голове.


Дополнительные советы:

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