Java 我怎样才能使这个按钮工作

Java 我怎样才能使这个按钮工作,java,swing,jbutton,Java,Swing,Jbutton,我正在编写一个代码,当你按下一个按钮并输出那个数字时,它会生成一个随机数。我已经编写了这段代码,它可以编译,但当我按下按钮时,一切都不起作用。有人能帮忙吗。这是我的一些代码 public class slotmachine extends JApplet { JButton b1 = new JButton("START"); JPanel p; int Int1; public slotmachine() { init(); }

我正在编写一个代码,当你按下一个按钮并输出那个数字时,它会生成一个随机数。我已经编写了这段代码,它可以编译,但当我按下按钮时,一切都不起作用。有人能帮忙吗。这是我的一些代码

public class slotmachine extends JApplet {

    JButton b1 = new JButton("START");
    JPanel p;
    int Int1;

    public slotmachine() {
        init();

    }

    public void init() {

        this.setLayout(null);
        this.setSize(1000, 1000);

        JButton b1 = new JButton("START");
        b1.setBounds(100, 100, 100, 100);

        getContentPane().add(b1);
        repaint();

    }

    public void run() {
        b1.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                Random random1 = new Random();
                int Int1 = random1.nextInt(11);

            }

        });
    }

    public void paint(Graphics g) {

        g.drawString("Your number is" + Int1, 30, 30);

    }
}
  • 避免使用
    null
    布局,像素完美的布局在现代ui设计中是一种错觉。影响零部件单个尺寸的因素太多,您无法控制。Swing的设计初衷是与布局管理器一起工作,丢弃这些布局管理器将导致无止境的问题,您将花费越来越多的时间来纠正这些问题
  • 在按钮的
    ActionListener
    中创建一个局部变量
    Int1
    。这与类的
    Int1
    无关
  • 您从未告诉UI更新
  • 由于未能调用super.paint,您打破了绘制链(准备好处理一些非常奇怪和奇妙的图形故障)
  • 您在使用
    b1时犯了与使用
    Int1时相同的错误。您创建一个实例级字段,但在
    init
    中使用一个局部变量对其进行阴影处理,这意味着当调用
    start
    时,
    b1
    null
    ,这将导致
    nullpointerexception
  • 相反,将
    JLabel
    添加到小程序中,使用它的
    setText
    方法显示随机值

    b1.addActionListener(new ActionListener() {
    
        public void actionPerformed(ActionEvent e) {
            Random random1 = new Random();
            int Int1 = random1.nextInt(11);
            lable.setText(Integer.toString(Int1));
        }
    
    });
    
    另外,如果可能的话,我会避免使用
    JApplet
    ,因为他们有自己的一系列问题,这些问题会让学习Swing API时的生活变得更加困难。相反,尝试对主容器使用
    JPanel
    ,然后将其添加到
    JFrame
    的实例中

    另外,请看:

    • 有关变量的本地和类/实例上下文的详细信息
    • 如果你真的对绘画作品感兴趣

    有关详细信息,请不要使用
    null
    布局。请尝试删除JButton b1=新JButton(“开始”);来自init()方法,因为您已经在类中声明了它。或者,按原样声明变量,但在init()内部初始化它。也在您的操作执行方法中。不要初始化新变量,而是为类中已声明的变量赋值。您还需要调用repaint()来更新appI无法找到包含设置按钮坐标和大小功能的布局。艾伦,你说的我都试过了,但还是不行。不过,还是要感谢你的帮助。它对我很有效,只需重用你声明的变量,并将侦听器和赋值添加到正确的对象中。从init()方法中删除JButton b1=new JButton(),并将动作侦听器移动到b1.setBounds()下面。在动作侦听器中调用repaint(),并将super.paintComponents(g)添加到绘制中method@Alan切勿建议任何人在
    paintComponents
    之外的任何方法中调用
    super.paintComponents
    ,您刚刚绕过了可能导致所有链接和建议出现不必要的绘制瑕疵的绘制过程。我将尝试改用布局管理器。