我正在尝试做类似cookie点击器的事情,但它不起作用。我还没设法创建一个显示点击量的“计数器”。这是我迄今为止所有的想法吗?
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Stocks implements ActionListener {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Stocks().createGui();
}
});
}
public void createGui() {
JFrame frame = new JFrame("Clicker");
frame.setSize(175, 200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new GridBagLayout());
frame.add(panel);
frame.getContentPane().add(panel, BorderLayout.WEST);
GridBagConstraints c = new GridBagConstraints();
JButton button1 = new JButton("Click this");
c.gridx = 0;
c.gridy = 0;
c.insets = new Insets(40, 40, 40, 40);
panel.add(button1, c);
button1.addActionListener(this);
}
答案 0 :(得分:1)
您可以在Stocks课程中设置变量int cnt = 0;
,每当有人点击按钮时,cnt
方法中的actionPerformed
增加{。}}。
答案 1 :(得分:0)
您应首先添加一个计数器作为您的类`Stock``
的属性public class Stocks {
private int counter;
用0:
初始化计数器变量public static void main(String[] args) {
this.counter = 0;
然后添加动作侦听器以增加变量:
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
counter++;
}
});
答案 2 :(得分:0)
正如您所说,您的actionPerformed方法为空,这意味着您在单击按钮时将应用程序编码为什么都不做。
这个答案假设你只有一个组件使用该类作为ActionListener:
在早期版本的Java中,它将是:
@Override
public void actionPerformed(ActionEvent e) {
counter++;
}
然而,Java 8为我们提供了Lambda表达式,并且允许它更容易(使用更少的代码)。
button1.addActionListener(event -> counter++);
您不需要创建ActionListener的实现,Java会为您解决此问题。如果您编写这样的代码,如果您有更多的组件使用该类作为ActionListener,则更容易,因为您无法将它们混合起来。
如果您需要它们来调用代码的共享部分,您仍然可以在Lambda表达式中调用方法
button1.addActionListener(event -> {callSharedMethod(); counter++;});
在此示例中,首先将调用共享方法。之后,计数器将被增强,这将/可能只能通过单击此按钮来完成。
答案 3 :(得分:0)
我很惊讶没有人建议通过继承来解决这个问题。您想要的按钮是 JButton
,但略微更专业(它必须计算自身执行的点击次数)。
public final class CountButton extends JButton {
private int counter = 0;
public CountButton(String text) {
super(text);
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
counter++;
}
});
}
public final int getCounter() {
return counter;
}
}