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是很容易的。