JLabel setText pas la mise à jour du texte
Je suis en train de mettre à jour un JLabel par l'aide de la setText()
méthode, mais je ne peux pas redessiner JLabel. Dois-je utiliser le repaint()
méthode pour le faire?
Voici la partie de code, je ne reçois pas toutes les erreurs, mais ce n'est pas la mise à jour de la JLabel.
public void actionPerformed(ActionEvent e) {
fc = new JFileChooser();
if(e.getSource() == addButton) {
int returnVal = fc.showOpenDialog(Main.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
filesList = fc.getSelectedFiles();
setFilesList(filesList);
StringBuilder logString = new StringBuilder();
logString.append("Files to Convert " + "\n");
for(int i = 0; i < getFiles().length; i++) {
logString.append(filesList[i].getAbsolutePath());
}
//JLabel log = new JLabel(); created above.
log.setText(logString.toString());
} else {
//log.append("Open command cancelled by user." + newline);
}
//log.setCaretPosition(log.getDocument().getLength());
}
}
Je voudrais commencer par dire un jLabel ne peut pas afficher le caractère de saut de ligne. L'envelopper dans un <html>, et utilisez <br/> balises.
Êtes-vous sûr que vous n'êtes pas ré-initialisation de la
oui, en fait je initialisée avec le constructeur.
JLabel nécessite pas de repeindre appel. Simplement en appelant
Êtes-vous sûr que vous n'êtes pas ré-initialisation de la
log
variable d'un nouveau JLabel
exemple après vous l'avez ajouté à votre disposition manager?oui, en fait je initialisée avec le constructeur.
JLabel nécessite pas de repeindre appel. Simplement en appelant
setText(...)
va changer le texte de l'étiquette, et c'est tout ce qui est nécessaire.OriginalL'auteur Isuru | 2012-04-12
Vous devez vous connecter pour publier un commentaire.
JLabel nécessite pas de repeindre appel. Simplement en appelant setText(...) va modifier le texte de l'étiquette, et c'est tout ce qui est nécessaire.
Je me demande si votre problème est un problème de concurrence, que vous faites un long processus en cours d'exécution sur la Balançoire événement thread et que cela empêche votre étiquette de mise à jour de son texte.
Si oui, alors pensez à faire votre long processus en cours d'exécution dans un thread d'arrière-plan comme celui fourni par un SwingWorker, et de mettre à jour votre JLabel du texte sur la Balançoire fil, tel qu'on peut le faire via le SwingWorker de publication de processus et de méthodes.
Pour en savoir plus, veuillez consulter le Leçon: la Simultanéité dans le Swing tutoriel.
Aussi Mario De... est correct de ne pas être en mesure d'imprimer des nouvelles lignes sur un JLabel. 1+ pour sa réponse.
OriginalL'auteur Hovercraft Full Of Eels
Je suis un peu perplexe sur la façon dont la peinture des images/composant fonctionne en Java. Vous pouvez
Paint(Graphics g)
,update(Graphics g)
qui, selon la javadoc appelle justepaint(g)
. Enfin il y a aussirepaint()
...Si aucune de ces semblent fonctionner, ne serait-il pas juste être plus facile de créer le label à la ligne où vous êtes en train d'essayer de définir le texte?
Edit: il y a aussi la possibilité d'utiliser un ineditable textArea. Non seulement il peut afficher le standard de caractère de saut de ligne, mais vous pouvez le mettre dans un jScrollPane, qui est bien pratique quand vous avez beaucoup de fichiers dans le journal, et vous n'avez pas besoin de repeindre les composantes de texte pour afficher du texte mis à jour. Le bonus est magnifique omi...
OriginalL'auteur MarioDS
Cet exemple simple fonctionne pour moi si le problème n'est pas
JLabel
mais quelques bug dans l'autre partie de votre code source. Merci de poster l'intégralité du code source.OriginalL'auteur michal.kreuzman
J'ai un problème similaire. J'ai essayé de
setText("Good Bye")
dansactionPerformed()
dans un bouton quitter ActionListener avant de l'éliminer de ma JFrame là, mais le texte n'était pas en train de changer.Finalement j'ai réalisé que mon label n'était pas mis à jour comme je l'ai été de disposer du cadre dans l'anonymat ActionListener classe. Après j'avais laissé le code de congé
ActionListener.actionPerformed()
, le texte de l'étiquette s'est mis à jour.J'ai eu de disposer de ma JFrame dans un nouveau thread, mais de s'assurer que:
actionPerformed
est fini, de sorte que le thread principal est de retour de l'anonyme de la classe imbriquée et les mises à jour de l'étiquette dans la classe principale.Un nouveau thread est démarré, qui attend un deuxième pour permettre de "Good Bye" à lire.
OriginalL'auteur alexW
repaint()
ne marchera pas ici.Simplement utiliser
label_name.paintImmediately(label_name.getVisibleRect());
Il sera mis à jour immédiatement.
OriginalL'auteur Mujthaba Mohammed