2011-12-13 43 views
6

Bir tane JLabel ve bir düğmem var, JLabel düğmenin basılma sayısını gösterir, ancak, düğme basma sayısını görüntüleyen JLabel'u nasıl güncelleyeceğimi anlayamıyorum.Dinamik olarak JLabel'i değiştirme

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

label1.setText("You have pressed button " + pressed + "times."); için. –

+0

Teşekkürler, daha önce üyelerini farketmedim ... :) – DejanLekic

cevap

9

Sorun, panelde gösterilmeyen yeni ve farklı bir JLabel oluşturuyor olmanızdır. düğmesi start tıklandığında yalnızca calculate() çağrı

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

+1 Benden daha hızlı ve daha iyi bir çözüm buldun. – Jonas

+0

+1, ikiniz de benden daha hızlılar! –

2

yok. Böylece bu yöntemi, düğme için ActionListener'a taşıyabilirsiniz. Ve JLabel'de setText numaralı telefonu arayarak repaint'u aramanız gerekmez. Normalde Swing'de repaint'u aramak zorunda değilsiniz. Örneğin. artık şöyle bir şey için kodunuzu değiştirin:

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."); 
    } 
}); 
+0

Evet, ne dedi. :) 1+ –

2

Değişim label1 = new JLabel("You have pressed button " + pressed + "times."); kod okunabilir hale getirmek için düzenlenen

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(); 
İlgili konular