2012-03-26 14 views
1

Ich versuche ein Array von JLabels zurückzusetzen. Es gibt Bilder auf der Oberseite der Etiketten, also wenn ich einen Knopf drücke, sollten die Etiketten zurückgesetzt werden. Ich habe versucht, es so zu machenZurücksetzen von JLabel

for(int i=0; i<desks.length; i++) 
    { 
    desks[i].setText(""); 
    rightPanel.add(desks[i]); 
    } 

also wenn jemand eine Idee hätte, wäre es great.cheers.

+5

* ", wenn jemand ein Idee "* Für eine bessere Hilfe, post ein [SSCCE] (http://sscce.org/). –

+1

für mehr Klarheit, könnten Sie eine dieser Lösungen in eine Methode verpacken und nennen Sie es "resetLabels". – mre

Antwort

3

dies eine der Möglichkeiten ist

int n = panel.getComponentCount(); 
if (n > 0) { 
    Component[] components = panel.getComponents(); 
    for (int i = 0; i < components.length; i++) { 
     if (components[i] instanceof JLabel) { 
      JLabel label = (JLabel) components[i]; 
      label.setText(""); 
     } 
    } 
} 
+0

+1 für die generische Lösung. Nicht sicher, ob das OP dies wirklich tun muss, da er/sie bereits die Labelreferenzen in einem separaten Array hat. – GETah

+0

@GETah hmmm wir sehen dort einen anderen Array-Typen, dann meinen einfachsten Weg, vorher upvoted – mKorbel

4

Sie müssen die Labels nicht erneut zum Inhaltsbereich hinzufügen, um ihren Text zurückzusetzen. tun nur die nach dem Beschriftungstext zu klären:

for(int i=0; i<desks.length; i++) 
{ 
    desks[i].setText(""); 
} 
5

keine Notwendigkeit, sie an der Platte erneut hinzuzufügen. Es sollte ausreichen, um den Text einfach auf eine leere Zeichenfolge zu setzen.

Wenn dies geschieht nicht, stellen Sie sicher, dass Sie es auf dem Event Dispatch Thread tun, als so:

SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
     desks[i].setText(""); 
    } 
}); 
+0

+1 für den 'SwingUtilities'-Hinweis – GETah