【发布时间】:2019-08-31 10:01:25
【问题描述】:
我正在尝试学习 Java 中的 GUI 编程,目前我有一个包含按钮和标签的框架。单击按钮时,会弹出一个对话框,说明该按钮被单击了多少次。我想对标签做同样的事情,但我不能让它更新过去说它被点击了零次。
这里是按钮的代码:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CountButton extends JButton {
private int counter = 0;
public CountButton(String text) {
super(text);
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
counter++;
JOptionPane.showMessageDialog(null, "You have clicked the button "
+ counter + " times!");
}
});
}
public int getCounter() {
return counter;
}
}
这是我尝试的实现:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class LayoutPractice {
public static void main(String[] args) {
JFrame frame = new JFrame("GUI Layout Practice");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1020,700);
JPanel panelOne = new JPanel();
//Button portion of frame
JButton button = new CountButton("Click me for a dialog!");
panelOne.add(button);
JLabel label = new JLabel("The button has been pressed 0 times.");
panelOne.add(label);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
label.setText("The button has been pressed " +
((CountButton) button).getCounter() + " times.");
}
});
frame.add(panelOne, BorderLayout.NORTH);
frame.setVisible(true);
}
}
编辑:我已更改代码以向按钮添加侦听器事件,以便在单击它时通过 label.setText() 更改标签的文本,但现在我的问题是第一个按钮单击不更新它。点击两次才开始更新,然后点击次数比实际点击次数少一倍。
【问题讨论】:
-
“我怀疑这是因为标签一旦创建就无法更新。” 当然可以更新。它只是不会根据用于初始化它的变量的变化而更新。
-
@AndrewThompson 那么在初始化之后我该如何更新它呢?
-
我会在看到 SSCCE / MCVE 后通知您。
-
@AndrewThompson 好的,我认为编辑应该满足 SSCCE 的要求。
-
“我认为编辑应该满足SSCCE”测试它!在您的 IDE 中启动一个新项目,复制/粘贴代码并检查它是否运行没有任何更改。如果没有,它不是运行的 MCVE / SSCCE时间问题,因为它既不是完整的也不是自包含的。我刚刚在another thread 上发布了一个 MCVE / SSCCE。注意它是如何导入的,一个类结构.. 运行它所需的一切。
标签: java swing user-interface jbutton