Java 如何在每次单击JButton时将值增加1?

Java 如何在每次单击JButton时将值增加1?,java,swing,jbutton,actionlistener,jlabel,Java,Swing,Jbutton,Actionlistener,Jlabel,我刚刚了解了ActionListener,我的任务是使用与JLabel关联的JButton创建一个简单的应用程序,该按钮显示一个int,每次单击该按钮时都会增加1的值。这是我的代码: import java.awt.*; import java.awt.event.*; import javax.swing.*; class ButtonPanel2 extends JPanel implements ActionListener { JButton button2; JLabel seco

我刚刚了解了
ActionListener
,我的任务是使用与
JLabel
关联的
JButton
创建一个简单的应用程序,该按钮显示一个
int
,每次单击该按钮时都会增加1的值。这是我的代码:

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

class ButtonPanel2 extends JPanel implements ActionListener {

JButton button2;
JLabel secondLabel;

int i = 1;
int total = 0;

ButtonPanel2()
{
    button2 = new JButton("Push");
    add(button2);

    button2.addActionListener(this);

    secondLabel = new JLabel("Button pushes: " + total);
    add(secondLabel);
}

public void actionPerformed(ActionEvent e)
{
    total += i;
}
}
驾驶员级别:

import java.awt.*;
import javax.swing.*;

class TestButtonPanel2 {

public static void main(String [] args)
{
    JFrame buttonFrame2 = new JFrame("Button Panel 2");

    ButtonPanel2 panel2 = new ButtonPanel2();

    buttonFrame2.add(panel2);
    buttonFrame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    buttonFrame2.setSize(400 , 400);
    buttonFrame2.setVisible(true);
}
}

提前感谢!:)

您需要在actionPerformed方法内部重新设置JLabel上的文本。即使将
total
变量传递到标签中,标签所获得的只是它所持有的当前值。标签的文本不会神奇地改变,每次需要更改时,必须调用
setText(…)

您需要在actionPerformed方法内的JLabel上重新设置文本。即使将
total
变量传递到标签中,标签所获得的只是它所持有的当前值。标签的文本不会神奇地改变,每次需要更改时,必须调用
setText(…)

ActionListener
中,按如下方式更新GUI:

public void actionPerformed(ActionEvent e)
{
    total += i;
    secondLabel.setText("Button pushes: " + total);
}

ActionListener
中,按如下方式更新GUI:

public void actionPerformed(ActionEvent e)
{
    total += i;
    secondLabel.setText("Button pushes: " + total);
}

这真是太遗憾了,我们有
ListModel
s、
ButtonModel
s、
TableModel
s等等,但没有
LabelModel
。事实上,很多web框架都会允许标签神奇地改变(尽管它们也会决定重新绘制什么)。OP似乎缺少的另一点是,不仅标签在
setText
中构造了一个不可变的
字符串
,他还传递了一个原语
int
,这意味着
标签
永远不会知道以后值会发生什么变化,即使有合适的模型。@装满鳗鱼的气垫船非常感谢你的解释,伙计,我现在明白我的错误了。干杯D@Ordous哈哈,这对我现在的水平来说太复杂了,无法理解mate。>@Ordous:构建“LabelModel”对象,然后通过某种侦听器结构(如SwingPropertyChangeSupport和PropertyChangeListener)将其绑定到JLabel是很容易的。这真是太遗憾了,我们有
ListModel
s、
ButtonModel
s、
TableModel
s等等,但是没有
LabelModel
。事实上,很多web框架都会允许标签神奇地改变(尽管它们也会决定重新绘制什么)。OP似乎缺少的另一点是,不仅标签在
setText
中构造了一个不可变的
字符串
,他还传递了一个原语
int
,这意味着
标签
永远不会知道以后值会发生什么变化,即使有合适的模型。@装满鳗鱼的气垫船非常感谢你的解释,伙计,我现在明白我的错误了。干杯D@Ordous哈哈,这对我现在的水平来说太复杂了,无法理解mate。>@Ordous:构建“LabelModel”对象,然后通过某种侦听器结构(如SwingPropertyChangeSupport和PropertyChangeListener)将其绑定到JLabel是很容易的。