2009-07-07 16 views
81

Jak wyświetlić znak nowej linii w JLabel?Newline w JLabel

Na przykład, jeśli chciałem:

Hello World!
blahblahblah

To co mam teraz:

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

to, co jest wyświetlane: blahblahblah

Hello World

Wybacz mi, jeśli to! to głupie pytanie, uczę się tylko podstaw Swing ...

+0

Zdecydowanie nie głupie pytanie. Zajęło mi trochę czasu, aby dowiedzieć się, że html jest również możliwe w swing. –

Odpowiedz

138

Otocz łańcuch za pomocą <html></html> i przerwij linie za pomocą <br/>.

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

tylko drobna korekta: użyj
zamiast tylko
... jest to zalecany sposób robienia tego (aby nie przegapić żadnych znaczników zamykających) ... szczęśliwe kodowanie ... –

+5

@NitinBansal Właściwie jest to zalecane w nowej wersji HTML zostawić to jako
. Nazywa się to pustym tagiem.
nadal działa w celu zapewnienia kompatybilności wstecznej. – gsingh2011

+0

@ gsingh2011: ok ... to lepiej :-) –

1

JLabel jest rzeczywiście zdolny do wyświetlania jakąś szczątkową HTML, dlatego nie reaguje do używania znaku nowego wiersza (w przeciwieństwie do, powiedzmy, System.out).

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

+0

* westchnienie * Próbowałem dodać takty, aby uciec od twojego html, ale mówi, że nie mogę edytować, chyba że dodaję co najmniej 6 znaków. – Annan

+1

@Annan To nie jest konieczne w HTML. To, o czym mówisz, dotyczy wspierania XHTML. http://stackoverflow.com/questions/1946426/html-5-is-br-br-br-br –

+0

@ b1naryatr0phy na, problem został naprawiony :) Oryginalny post miał literał '
' tag który był sformatowany przez przepełnienie stosu jako literalną przerwę wiersza w poście. – Annan

2

Można zrobić

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

a zostanie ona automatycznie owinąć go w razie potrzeby.

2

Dzięki Aakash za polecanie JIDE MultilineLabel. StyledLabel JIDE został ostatnio udoskonalony, aby obsługiwać wiele linii. Poleciłbym go na MultilineLabel, ponieważ ma wiele innych wspaniałych funkcji. Możesz sprawdzić artykuł na temat StyledLabel poniżej. Jest nadal bezpłatny i open source.

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

4

Można próbować to zrobić:

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

Zalety ten sposób to:

  • Zastępuje wszystkie znaki nowej linii z <br/>, bez przerwy.
  • Automatycznie zastępuje kolejno < i > odpowiednio &lt; i &gt;, zapobiegając niektórym zniszczeniom renderowania.

Co robi jest:

  • "<html>" + dodaje otwór html znacznik na początku
  • .replaceAll("<", "&lt;").replaceAll(">", "&gt;") ucieka < i > dla wygody
  • .replaceAll("\n", "<br/>") zastępuje wszystkie znaki nowej linii przez br (HTML linii przerwy) znaczniki do tego, co chcesz
  • ... i + "</html>" zamyka nasz tag html na końcu.

P.S .: Przykro mi, że budzę taki stary post, ale cokolwiek, masz niezawodny fragment swojej Java!