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 ...


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);

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!



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.


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


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.