Newline in JLabel


107

Wie kann ich eine neue Zeile in anzeigen JLabel?

Zum Beispiel, wenn ich wollte:

Hallo Welt!
blahblahblah

Das habe ich gerade:

JLabel l = new JLabel("Hello World!\nblahblahblah", SwingConstants.CENTER);

Folgendes wird angezeigt:

Hallo Welt! Blahblahblah

Verzeih mir, wenn dies eine dumme Frage ist, ich lerne nur ein paar Swing-Grundlagen ...


1
Auf keinen Fall eine blöde Frage. Ich habe eine Weile gebraucht, um herauszufinden, ob HTML auch im Schwung möglich ist.
Simon Baars

Antworten:


174

Umgeben Sie die Zeichenfolge mit <html></html>und brechen Sie die Linien mit <br/>.

JLabel l = new JLabel("<html>Hello World!<br/>blahblahblah</html>", SwingConstants.CENTER);

3
Nur eine kleine Korrektur: Verwenden Sie <br /> statt nur <br> ... dies wird empfohlen (um keine schließenden Tags zu verpassen) ... Happy Coding ...
Nitin Bansal

6
@NitinBansal Eigentlich wird in der neuen HTML-Version empfohlen, es als <br> zu belassen. Es wird als void tag bezeichnet. <br /> funktioniert immer noch aus Gründen der Abwärtskompatibilität.
Gsingh2011

@ gsingh2011: ok ... das ist besser :-)
Nitin Bansal

3
Irgendeine Idee, warum JLabels standardmäßig keine Zeilenumbrüche unterstützen?
Annäherung an

2
Sie müssen das HTML-Tag nicht einmal schließen. Wenn Sie zur Laufzeit Text anhängen müssen, wird dies erheblich vereinfacht!
Roberto

9

Sie können dies versuchen:

myLabel.setText("<html>" + myString.replaceAll("<","&lt;").replaceAll(">", "&gt;").replaceAll("\n", "<br/>") + "</html>")

Dies hat folgende Vorteile:

  • Es ersetzt unbedingt alle Zeilenumbrüche durch <br/>.
  • Es ersetzt automatisch eventuell <bzw. >durch &lt;und &gt;verhindert so ein gewisses Rendering-Chaos.

Was es tut ist:

  • "<html>" +Fügt htmlam Anfang ein Eröffnungs- Tag hinzu
  • .replaceAll("<", "&lt;").replaceAll(">", "&gt;")entkommt <und >für die Bequemlichkeit
  • .replaceAll("\n", "<br/>")Ersetzt alle Zeilenumbrüche durch br(HTML-Zeilenumbruch-) Tags für das, was Sie wollten
  • ... und + "</html>"schließt unser htmlTag am Ende.

PS: Es tut mir sehr leid, einen so alten Beitrag aufzuwecken, aber wie auch immer, Sie haben ein zuverlässiges Snippet für Ihr Java!



2

Du kannst tun

JLabel l = new JLabel("<html><p>Hello World! blah blah blah</p></html>", SwingConstants.CENTER);

und es wird es gegebenenfalls automatisch einwickeln.


2

Vielen Dank an Aakash für die Empfehlung von JIDE MultilineLabel. Das StyledLabel von JIDE wurde kürzlich erweitert, um mehrere Leitungen zu unterstützen. Ich würde es über das MultilineLabel empfehlen, da es viele andere großartige Funktionen hat. Sie können einen Artikel über StyledLabel unten lesen. Es ist immer noch kostenlos und Open Source.

http://www.jidesoft.com/articles/StyledLabel.pdf


1

JLabel ist tatsächlich in der Lage, rudimentäres HTML anzuzeigen, weshalb es nicht auf Ihre Verwendung des Zeilenumbruchzeichens reagiert (im Gegensatz beispielsweise zu System.out).

Wenn Sie den entsprechenden HTML- <BR>Code eingeben und verwenden , erhalten Sie Ihre Zeilenumbrüche.


seufzen Ich habe versucht , Backticks um Ihre HTML zu entkommen, aber es sagt , dass ich nicht bearbeiten kann , wenn ich hinzufüge , mindestens 6 Zeichen.
AnnanFay

1
@Annan Das ist in HTML nicht notwendig. Sie sprechen von der Unterstützung von XHTML. stackoverflow.com/questions/1946426/html-5-is-it-br-br-or-br
b1nary.atr0phy

@ b1naryatr0phy na, das Problem wurde behoben :) Der ursprüngliche Beitrag hatte ein Literal- <br>Tag, das durch Stapelüberlauf als wörtlicher Zeilenumbruch im Beitrag formatiert wurde.
AnnanFay
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.