【问题标题】:How to display a button and also display a random number when a user pressses the button?当用户按下按钮时,如何显示一个按钮并显示一个随机数?
【发布时间】:2015-10-07 03:51:07
【问题描述】:

您好,我一直坚持如何让按钮显示随机数。这就是我现在的位置。我不知道随机数生成器代码会去哪里。如果我把它放在 ActionListener 之前 if 只会在按钮旁边发布,而不是在按下按钮时出现。它一直给我错误信息

错误: 无法引用封闭范围内定义的非最终局部变量 num1。

请参考以下代码:

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

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JOptionPane;
import java.util.Random;

public class myTest {

    public static void main(String[] args) {

        Random generator = new Random();
        int num1;

        final JFrame frame = new JFrame();
        JPanel panel = new JPanel();

        num1 = generator.nextInt(101);
        System.out.println("the random number is:" +num1);

          JButton button1 = new JButton("Push Me!");

        frame.add(panel);
        panel.add(button1);
        frame.setVisible(true);

        button1.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent arg0) {
           num1 = generator.nextInt(101);
        System.out.println("the random number is:" +num1);
            }
        });

    }

}

【问题讨论】:

标签: java swing


【解决方案1】:

您可以在JButton 上致电setText。另外,不要忘记设置默认关闭操作。您不能从外部范围引用num1。我想你想要类似的东西

Random generator = new Random();
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();

int num1 = generator.nextInt(101);
System.out.println("the random number is:" + num1);

JButton button1 = new JButton(String.format("Push Me! %d", num1));
frame.add(panel);
panel.add(button1);
frame.pack();
frame.setVisible(true);

button1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        int num1 = generator.nextInt(101);
        System.out.println("the random number is:" + num1);
        button1.setText(String.format("Push Me! %d", num1));
    }
});

【讨论】:

  • 我仍然收到相同的错误消息。我使用了你输入的内容。
  • @sawg 我在 Java 8 中测试了我的示例。上面是主要方法,它在这里工作。
【解决方案2】:

该错误与 num1 被声明为具有 main 上下文的局部变量这一事实有关,但将来可能会更改。

查看Referencing non-final variable: why does this code compile? 以获得更多解释

相反,由于在调用 ActionListener 之前不需要它,因此只需使其对 ActionListener 本身可用

button1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        int num1 = generator.nextInt(101);
        System.out.println("the random number is:" + num1);
    }
});

【讨论】:

    猜你喜欢
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 2020-12-23
    相关资源
    最近更新 更多