Est-il un “retour” de la propriété pour JLabel?
Je suis l'affichage du texte dans un JLabel. Fondamentalement, je suis à la production de ce texte de façon dynamique, et ensuite j'applique quelques balises HTML (par exemple, BR
et B
) pour formater le texte. Enfin j'attribue ce texte mis en forme à mon JLabel.
Maintenant, je veux mon Jlabel automatiquement le texte à la ligne à la ligne suivante lorsqu'il atteint la fin de l'écran, comme le "retour" dans le bloc-notes.
Comment puis-je le faire?
- Juste pour info, Andrew réponse est le meilleur.
- savais juste que les captures d'écran qui fera la différence!</VBG>
- Oui, j'ai commencer à faire un peu plus, mais encore, il aide à avoir la bonne réponse. Je suppose que je devrais apprendre un peu de HTML et des styles...
- Ils sont assez cool, mais de vous faire réponse plus lent! 🙂
- pour la 2ème phrase, et pas seulement vous, mais tous côté serveur développeur à l'aide de tous langue. Il m'étonne du peu que (par exemple) de la servlet les développeurs à comprendre sur le code HTML, de leurs applications. sont crachant. Comme pour la première. certains pourraient considérer que mon incessante plus des images visuelles de "bruit".
- Vrai, j'ai donc utiliser une astuce. Post la source 1, puis ajouter les images dans un montage. Bien sûr, cela n'a pas d'aide ici, car il m'a fallu plus de temps pour écrire la (v. court) source qu'il a pris pour les 2 réponses et une tique. 😉
Vous devez vous connecter pour publier un commentaire.
Devrait fonctionner si vous le texte à la ligne dans
<html>...</html>
Mise à JOUR:
Vous devriez probablement taille maximale, trop, alors.
JEditorPane
. "ce serait amusant!" Non, il n'est pas. Faites-moi confiance. 😉Une largeur peut être réglée pour le
body
à l'aide de HTML de styles (CSS). Ce à son tour, permettra de déterminer le nombre de lignes de rendu, et, de, la taille préférée de l'étiquette.Réglage de la largeur en CSS évite la nécessité de calculer où les sauts de ligne doit se produire dans les (ou la meilleure taille de) l'étiquette.
label.setText( label.getText() + "<li>New list bullet" );
Un autre moyen serait d'utiliser un
JTextArea
au lieu d'unJLabel
avecsetWrapStyleWord
etsetLineWrap
définie sur true et avec les réglages pour le faire paraître et de se comporter comme unJLabel
(suppression de la frontière, le rendre non-opaque, de le rendre non modifiable et non focusable).Sinon, si vous devez absolument utiliser un
JLabel
, vous seriez forcé d'utiliser FontMetrics à mesure de votre texte, de vérifier l'espace blanc, puis ajoutez le code HTML en dur pauses dans la position appropriée vous-même.J'ai trouvé que cette solution est la plus simple et fonctionne correctement avec le redimensionnement ainsi. D'autres que l'enchaînement du texte dans
<html>
balises, vous devez également mettre l'étiquette dans un récipient qui respecte la hauteur voulue, et définit la largeur maximale. Par exemple, vous pouvez placer l'étiquette dans le NORD deBorderLayout
.Ici est un simple mais complète du programme de travail pour illustrer cela. Vous pouvez redimensionner le cadre de quelque façon que vous voulez; l'étiquette occupe toute la largeur et la hauteur de l'ajuster en conséquence pour faire passer le texte. Notez que tout ce que je fais, c'est à l'aide de
<html>
de balises et de mettre l'étiquette dans le NORD de laBorderLayout
.Juste pensé que je devrais poster ce pour toute personne cherchant sur internet, comme c'était la petite erreur qui m'a coûté 30 minutes, mais assurez-vous que vous avez fait enveloppé le texte en HTML. Vous avez peut-être pensé que vous n'avez et n'en a pas. Vérifier, j'ai oublié, et quand je l'ai enveloppé dans du HTML, il fixe pour moi.
JLabel label = new JLabel("Lorem ipsum long paragraph");
mal.JLabel label = new JLabel("<html>Lorem ipsum long paragraph</html>");
correct!J'aime le JTextArea approche mentionnée ci-dessus, parce qu'il redimensionne bien au SUD dans un BorderLayout panneau (aussi longtemps que le CENTRE composant peut prendre le relais si le nombre de lignes dans le JTextArea changements).
Cependant, dans Nimbus L&F il y a un piège dans la définition de la JTextArea la couleur d'arrière-plan. Il semble que Nimbus utilise la magie des couleurs (étendue de la classe de java.awt.De la couleur) qui vont transparent dans le JTextArea. Donc, si vous êtes de la copie de la couleur d'arrière-plan à partir d'un Composite à la JText zone vous avez besoin de convertir la Couleur à l'ARGB et de retour à la Couleur. Le code suivant fonctionne pour moi dans toutes les L&Fs dans mon JRE (Nimbus, CDE Motif, Métal, Mac OS X):
J'ai fait la police de caractères un peu plus petits. Bien sûr, vous pouvez garder JLabel la taille de la police si vous le souhaitez.