2011-12-13 21 views
6

को बदलने के लिए मेरे पास एक 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

कोड पठनीय बनाने के लिए संपादित करने के लिए। –

+0

धन्यवाद, मैंने पहले सदस्यों को नोटिस नहीं किया था ... :) – DejanLekic

उत्तर

9

मुद्दा यह है कि आप एक नया, अलग जेएलएबल बना रहे हैं जो पैनल में दिखाई नहीं दे रहा है।

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

+1 आप मुझसे ज्यादा तेज थे और एक बेहतर समाधान था। – Jonas

+0

+1, आप दोनों मुझसे जल्दी थे! –

2

कर आप केवल calculate() फोन जब बटन start क्लिक किया जाता है। तो आप उस विधि को बटन के लिए एक्शनलिस्टर में ले जा सकते हैं। और JLabel पर setText पर कॉल करके, आपको repaint पर कॉल करने की आवश्यकता नहीं है। आम तौर पर आपको स्विंग में 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."); 
    } 
}); 
+0

हाँ, उसने क्या कहा। :) 1+ –

2

बदलें label1 = new JLabel("You have pressed button " + pressed + "times.");label1.setText("You have pressed button " + pressed + "times.");

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(); 
संबंधित मुद्दे