java - 按下 GUI 按钮,从数组中随机选择一个单词并将其放置在 JLabel 上

标签 java swing

我对这个 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. 您在编写时声明了一个匿名 JLabel:

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

    您需要将其设置为变量:

    JLabel label = new JLabel("Random word here");
    subPanel1.add(label);
    
  2. 现在您的按钮拥有自己的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);
        }
    });
    

这应该可以实现您想要做的事情,我还没有尝试过,但它在我的脑海中有效。

<小时/>

其他提示:

关于java - 按下 GUI 按钮,从数组中随机选择一个单词并将其放置在 JLabel 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55924632/

相关文章:

java - 在 KeyVaultClient java 中将代理设置为 AuthenticationContext 没有效果

java - 在 JScrollPane 中隐藏 JScrollBar

java - GUI设计中的一些问题

java - 使用线程在 JTable 中插入行

java - Jersey 过滤器在 Tomcat 上抛出异常

java - 如何改变JFrame图标的大小

java - 获取 JButton 的默认边框

java - 在Java中,我们如何知道构造函数中的super()何时完成?

java - 保存 JSP Web 应用程序配置变量的最佳策略?

java - Java 子类中的构造函数不正确