繁体   English   中英

将动作侦听器添加到jbutton

[英]Adding a action listener to a jbutton

首先,我不是一个经验丰富的程序员或任何类似的人,我正在尝试制作一个简单的Java按钮和一个文本来告诉您按下按钮的次数,这是到目前为止的代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Random;


public class cookieClicker {
private static void cookies() {
    int a = 0;
    JFrame cookie = new JFrame("Cookie Counter");
    cookie.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JButton clickCookies = new JButton("Cookies!!");
    clickCookies.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
        a++;
    } 

    } );


    if ( a == 0 ) {
        JLabel text1 = new JLabel("You have no cookies you fat twat!", SwingConstants.CENTER);
        text1.setPreferredSize(new Dimension(400, 150));
        cookie.getContentPane().add(text1, BorderLayout.CENTER);
        }
    else {
    if ( a == 1 ) {
        JLabel text2 = new JLabel("You have " + a + " cookie", SwingConstants.CENTER);
        text2.setPreferredSize(new Dimension(400, 150));
        cookie.getContentPane().add(text2, BorderLayout.CENTER);
    }
    else {
        JLabel text3 = new JLabel("You have " + a + " cookies", SwingConstants.CENTER);
        text3.setPreferredSize(new Dimension(400, 150));
        cookie.getContentPane().add(text3, BorderLayout.CENTER);
    }
    }
    clickCookies.setBounds(50,100,95,30);
    cookie.add(clickCookies);
    cookie.setLocationRelativeTo(null);
    cookie.setLayout(new FlowLayout() );
    cookie.pack();
    cookie.setVisible(true);
}
public static void main(String[] args) {

cookies();

}
}

编译时返回:

cookieClicker.java:15: error: local variables referenced from an inner class must be final or effectively final
a++;
^

关于您的问题:您需要将计数(a)存储在字段中,而不是局部变量中。

但是您的代码对事件和侦听器的原理有很大的误解。 创建JFrame之后,甚至在使其可见之前,您都试图立即获得点击数。 这是没有意义的。 当时用户如何单击按钮? 您需要从侦听器本身更改标签的文本(而不是每次都添加新标签):单击按钮时,显示的文本会更改。 这就是actionPerformed方法的作用:对按钮单击做出反应。

官方的Swing教程提供了大量示例和说明,显示

  • 如何启动一个应用程序
  • 如何使用代表您的JFrame的类,而不在静态方法中做任何事情
  • 如何使用监听器
  • 如何布置组件

阅读它们,因为您实际上并不是在做事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM