Baris baru di JLabel

107

Bagaimana cara menampilkan baris baru di JLabel?

Misalnya, jika saya ingin:

Halo Dunia!
bla bla bla

Inilah yang saya miliki sekarang:

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

Inilah yang ditampilkan:

Halo Dunia! Bla bla bla

Maafkan saya jika ini pertanyaan bodoh, saya baru saja mempelajari beberapa dasar-dasar Swing ...

mportiz08.dll
sumber
1
Jelas bukan pertanyaan bodoh. Butuh beberapa saat bagi saya untuk mengetahui bahwa html juga bisa diayunkan.
Simon Baars

Jawaban:

174

Kelilingi string dengan <html></html>dan hancurkan garis dengan <br/>.

JLabel l = new JLabel("<html>Hello World!<br/>blahblahblah</html>", SwingConstants.CENTER);
freitas
sumber
3
hanya sedikit koreksi: gunakan <br /> alih-alih hanya <br> ... ini cara yang disarankan untuk melakukannya (untuk tidak melewatkan tag penutup) ... selamat coding ...
Nitin Bansal
6
@NitinBansal Sebenarnya disarankan dalam versi baru HTML membiarkannya sebagai <br>. Ini disebut tag void. <br /> masih berfungsi untuk kompatibilitas mundur.
gsingh2011
@ gsingh2011: ok ... lebih baik :-)
Nitin Bansal
3
Ada ide MENGAPA JLabel tidak mendukung baris baru secara default?
ApproachingDarknessFish
2
Anda sebenarnya tidak perlu menutup tag html. Jika Anda perlu menambahkan teks saat runtime, ini sangat menyederhanakannya!
Roberto
9

Anda dapat mencoba dan melakukan ini:

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

Keuntungan melakukan ini adalah:

  • Ini menggantikan semua baris baru dengan <br/>, tanpa gagal.
  • Ini secara otomatis menggantikan akhirnya <dan >dengan &lt;dan &gt;masing - masing, mencegah beberapa kerusakan render.

Apa yang dilakukannya adalah:

  • "<html>" +menambahkan htmltag pembuka di awal
  • .replaceAll("<", "&lt;").replaceAll(">", "&gt;")lolos <dan >untuk kenyamanan
  • .replaceAll("\n", "<br/>")mengganti semua baris baru dengan brtag (HTML line break) untuk apa yang Anda inginkan
  • ... dan + "</html>"menutuphtml tag di akhir.

PS: Saya sangat menyesal membangunkan posting lama seperti itu, tetapi terserah, Anda memiliki cuplikan yang dapat diandalkan untuk Java Anda!

TheSola10
sumber
2

Anda dapat melakukan

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

dan secara otomatis akan membungkusnya jika perlu.

nevster
sumber
2

Terima kasih Aakash karena telah merekomendasikan JIDE MultilineLabel. StyledLabel JIDE juga ditingkatkan baru-baru ini untuk mendukung banyak baris. Saya akan merekomendasikannya melalui MultilineLabel karena memiliki banyak fitur hebat lainnya. Anda dapat melihat artikel di StyledLabel di bawah ini. Ini masih gratis dan open source.

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

jidesoft
sumber
1

JLabel sebenarnya mampu menampilkan beberapa HTML dasar, itulah sebabnya JLabel tidak menanggapi penggunaan karakter baris baru Anda (tidak seperti, katakanlah, System.out).

Jika Anda memasukkan HTML yang sesuai dan digunakan <BR>, Anda akan mendapatkan baris baru.

Uri
sumber
sigh Saya mencoba menambahkan backticks untuk keluar dari html Anda, namun dikatakan saya tidak dapat mengedit kecuali saya menambahkan setidaknya 6 karakter.
AnnanFay
1
@Annan Itu tidak perlu dalam HTML. Apa yang Anda bicarakan adalah untuk mendukung XHTML. stackoverflow.com/questions/1946426/html-5-is-it-br-br-or-br
b1nary.atr0phy
@ b1naryatr0phy na, masalah sudah diperbaiki :) Posting asli memiliki literal <br> tag yang diformat oleh stack-overflow sebagai pemisah baris literal di postingan.
AnnanFay