我有一个JLabel
和一个按钮,JLabel
显示按下按钮的次数,但是,我无法确定如何更新显示数量的JLabel
按钮按下。
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class SimpleGui {
private JFrame f = new JFrame("Basic GUI"); // create Frame
int pressed = 0; // tracks number of button presses.
JLabel label1 = new JLabel("You have pressed button " + pressed + "times.");
private JButton start = new JButton("Click To Start!");
public SimpleGui() {
// Setup Main Frame
f.getContentPane().setLayout(new GridLayout(0, 1));
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
calculate();
}
});
// Add components
f.add(label1);
f.add(start);
// Allows the Swing App to be closed
f.addWindowListener(new ListenCloseWdw());
}
public class ListenMenuQuit implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
public class ListenCloseWdw extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
public void launchFrame() {
// Display Frame
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack(); // Adjusts panel to components for display
f.setVisible(true);
}
public static void main(String args[]) {
PrimeTime gui = new PrimeTime();
gui.launchFrame();
}
public void calculate() {
pressed++;
label1 = new JLabel("You have pressed button " + pressed + "times.");
// update the GUI with new jLabel
f.repaint();
}
}
答案 0 :(得分:9)
问题是您正在创建一个未在面板中显示的新的不同JLabel。
DO
public void calculate(){
pressed++;
this.label1.setText("You have pressed button " + pressed + "times.");
}
答案 1 :(得分:2)
您只需在点击按钮calculate()
时致电start
。因此,您可以将该方法移动到按钮的ActionListener中。通过在JLabel上调用setText
,您无需致电repaint
。通常您不必在Swing中调用repaint
。例如。将代码改为这样的代码:
final JLabel label1 = new JLabel("You have pressed button " + pressed + "times.");
private JButton start = new JButton(new AbstractAction("Click To Start!") {
public void actionPerformed(ActionEvent e) {
pressed++;
label1.setText("You have pressed button " + pressed + "times.");
}
});
答案 2 :(得分:2)
将label1 = new JLabel("You have pressed button " + pressed + "times.");
更改为label1.setText("You have pressed button " + pressed + "times.");
答案 3 :(得分:1)
/* try and understand this code, here i use an icon to set the labe's image and the getIcon method of Label's to change the icon of previous label using setIcon method. */
Icon picLabelicon new ImageIcon(img); /* setting the icon initially*/
JLabel picLabel = new JLabel();
picLabel.setIcon(picLabelicon);
/* now you have set the icon initially now lets change it dynamically*/
JLabel modify = new JLabel(new ImageIcon(newimg)); /* new label you wanted to use*/
picLabelicon=modify.getIcon();
picLabel.setIcon(picLabelicon);
revalidate();
repaint();