Nowa linia w JLabel

107

Jak mogę wyświetlić nowy wiersz w JLabel?

Na przykład, gdybym chciał:

Witaj świecie!
blahblahblah

Oto, co mam teraz:

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

Oto, co jest wyświetlane:

Witaj świecie! Blahblahblah

Wybacz, jeśli to głupie pytanie, właśnie uczę się podstaw Swinga ...

mportiz08
źródło
1
Zdecydowanie nie jest to głupie pytanie. Zajęło mi trochę czasu, zanim zrozumiałem, że html jest możliwy również w swing.
Simon Baars,

Odpowiedzi:

174

Otocz strunę <html></html>i zerwij linie <br/>.

JLabel l = new JLabel("<html>Hello World!<br/>blahblahblah</html>", SwingConstants.CENTER);
freitass
źródło
3
tylko mała korekta: użyj <br /> zamiast tylko <br> ... jest to zalecany sposób robienia tego (aby nie przegapić żadnych tagów zamykających) ... miłego kodowania ...
Nitin Bansal
6
@NitinBansal Właściwie w nowej wersji HTML zaleca się pozostawienie go jako <br>. Nazywa się to void tag. <br /> nadal działa w celu zapewnienia kompatybilności wstecznej.
gsingh2011
@ gsingh2011: ok ... to lepiej :-)
Nitin Bansal
3
Każdy pomysł DLACZEGO JLabel nie obsługuje domyślnie znaków nowej linii?
ApproachingDarknessFish,
2
W rzeczywistości nie musisz nawet zamykać tagu HTML. Jeśli chcesz dołączyć tekst w czasie wykonywania, to bardzo to upraszcza!
Roberto,
10

Możesz spróbować to zrobić:

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

Zalety takiego rozwiązania to:

  • Zastępuje wszystkie nowe linie <br/>, bez wątpienia.
  • To automatycznie zastępuje ostateczny <i >ze &lt;i &gt;odpowiednio, zapobiegając niektórzy czynią spustoszenie.

Co to jest:

  • "<html>" +dodaje htmltag otwierający na początku
  • .replaceAll("<", "&lt;").replaceAll(">", "&gt;")ucieka <i >dla wygody
  • .replaceAll("\n", "<br/>")zastępuje wszystkie znaki nowej brlinii znacznikami (podział wiersza HTML) na to, co chciałeś
  • ... i + "</html>"zamyka nasz htmltag na końcu.

PS: Bardzo mi przykro, że obudziłem taki stary post, ale nieważne, masz niezawodny fragment dla swojej Javy!

TheSola10
źródło
2

Możesz to zrobić

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

i automatycznie zawinie go w razie potrzeby.

nevster
źródło
2

Dziękuję Aakash za polecenie JIDE MultilineLabel. JIDE's StyledLabel również został ostatnio ulepszony do obsługi wielu linii. Poleciłbym go zamiast MultilineLabel, ponieważ ma wiele innych wspaniałych funkcji. Możesz przeczytać artykuł o StyledLabel poniżej. Jest nadal darmowy i open source.

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

jidesoft
źródło
1

JLabel jest w rzeczywistości w stanie wyświetlić niektóre podstawowe elementy HTML, dlatego nie reaguje na użycie znaku nowej linii (w przeciwieństwie do, powiedzmy, System.out).

Jeśli umieścisz odpowiedni kod HTML i <BR>użyjesz go, otrzymasz nowe linie.

Uri
źródło
westchnienie Próbowałem dodać lewy znak, aby uciec z twojego HTML, ale jest napisane, że nie mogę edytować, chyba że dodam co najmniej 6 znaków.
AnnanFay,
1
@Annan To nie jest konieczne w HTML. To, o czym mówisz, dotyczy obsługi XHTML. stackoverflow.com/questions/1946426/html-5-is-it-br-br-or-br
b1nary.atr0phy
@ b1naryatr0phy na, problem został rozwiązany :) Oryginalny post miał <br>znacznik literału, który został sformatowany przez przepełnienie stosu jako dosłowny podział wiersza w poście.
AnnanFay