How to dynamically change JLabel

I have one JLabel and one button, JLabel displays the number of clicks on the button, however I can not figure out how to update JLabel , displaying the number of clicks on the buttons.

 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(); } } 
+6
source share
4 answers

The problem is that you are creating a new, different JLabel that does not appear on the panel.

do

 public void calculate(){ pressed++; this.label1.setText("You have pressed button " + pressed + "times."); } 
+9
source

Only calculate() is called when the start button is pressed. This way you can move this method to the ActionListener for the button. And by calling setText in JLabel, you do not need to call repaint . Normally you do not need to call repaint in Swing. For instance. change your code to something like this:

 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
source

Change label1 = new JLabel("You have pressed button " + pressed + "times."); on label1.setText("You have pressed button " + pressed + "times.");

+2
source

Try to understand this code, here I use the icon to set the tag image and the getIcon method for the Tag to change the icon of the previous tag using the 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 let's change it dynamically

 JLabel modify = new JLabel(new ImageIcon(newimg)); /* new label you wanted to use */ picLabelicon=modify.getIcon(); picLabel.setIcon(picLabelicon); revalidate(); repaint(); 
+1
source

Source: https://habr.com/ru/post/903717/


All Articles