ขึ้นบรรทัดใหม่ใน JLabel


108

ฉันจะแสดงขึ้นบรรทัดใหม่ได้JLabelอย่างไร?

ตัวอย่างเช่นหากฉันต้องการ:

สวัสดีชาวโลก!
อื่น ๆ

นี่คือสิ่งที่ฉันมีในตอนนี้:

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

นี่คือสิ่งที่แสดง:

สวัสดีชาวโลก - - '

ยกโทษให้ฉันถ้านี่เป็นคำถามโง่ ๆ ฉันแค่เรียนรู้พื้นฐานการสวิง ...


1
ไม่ใช่คำถามโง่ ๆ อย่างแน่นอน ฉันใช้เวลาสักพักเพื่อหา html ก็เป็นไปได้เช่นกัน
Simon Baars

คำตอบ:


176

ล้อมรอบด้วยสตริงและทำลายเส้นด้วย<html></html><br/>

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

4
แก้ไขเพียงเล็กน้อย: ใช้ <br /> แทนที่จะเป็นเพียง <br> ... นี่เป็นวิธีที่แนะนำ (เพื่อไม่ให้พลาดแท็กปิด) ... ขอให้มีความสุขในการเข้ารหัส ...
Nitin Bansal

6
@NitinBansal แนะนำให้ใช้ใน HTML เวอร์ชันใหม่เพื่อให้เป็น <br> เรียกว่าแท็กโมฆะ <br /> ยังคงทำงานเพื่อความเข้ากันได้แบบย้อนหลัง
gsingh2011

@ gsingh2011: ok ... thats better :-)
Nitin Bansal

3
มีความคิดว่าทำไม JLabel ไม่รองรับการขึ้นบรรทัดใหม่โดยค่าเริ่มต้น?
ApproachingDarknessFish

2
คุณไม่จำเป็นต้องปิดแท็ก html ด้วยซ้ำ หากคุณต้องการต่อท้ายข้อความบนรันไทม์สิ่งนี้จะช่วยให้ง่ายขึ้นมาก!
Roberto

10

คุณสามารถลองทำสิ่งนี้:

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

ข้อดีของการทำเช่นนี้คือ:

  • จะแทนที่บรรทัดใหม่ทั้งหมดด้วย <br/>โดยไม่ล้มเหลว
  • มันจะแทนที่โดยอัตโนมัติในที่สุด<และ>ด้วย&lt;และ&gt;ตามลำดับเพื่อป้องกันความเสียหายบางอย่าง

มันคืออะไร:

  • "<html>" +เพิ่มhtmlแท็กเปิดที่จุดเริ่มต้น
  • .replaceAll("<", "&lt;").replaceAll(">", "&gt;")หลบหนี<และ>เพื่อความสะดวก
  • .replaceAll("\n", "<br/>")แทนที่บรรทัดใหม่ทั้งหมดด้วยbrแท็ก (ตัวแบ่งบรรทัด HTML) สำหรับสิ่งที่คุณต้องการ
  • ... และ+ "</html>"ปิดhtmlแท็กของเราในตอนท้าย

PS: ฉันเสียใจมากที่ปลุกโพสต์เก่า ๆ แบบนี้ แต่ไม่ว่าคุณจะมีตัวอย่างข้อมูลที่เชื่อถือได้สำหรับ Java




2

ขอบคุณ Aakash ที่แนะนำ JIDE MultilineLabel StyledLabel ของ JIDE ได้รับการปรับปรุงเมื่อเร็ว ๆ นี้เพื่อรองรับหลายสาย ฉันอยากจะแนะนำมันผ่าน MultilineLabel เนื่องจากมีคุณสมบัติที่ยอดเยี่ยมอื่น ๆ อีกมากมาย คุณสามารถอ่านบทความเกี่ยวกับ StyledLabel ด้านล่าง มันยังฟรีและโอเพ่นซอร์ส

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


1

จริงๆแล้ว JLabel สามารถแสดง HTML พื้นฐานบางอย่างได้ซึ่งเป็นเหตุผลว่าทำไมจึงไม่ตอบสนองต่อการใช้อักขระขึ้นบรรทัดใหม่ของคุณ (ไม่เหมือนกับ System.out)

หากคุณใส่ HTML ที่เกี่ยวข้องและใช้<BR>คุณจะได้รับบรรทัดใหม่ของคุณ


ถอนหายใจฉันพยายามเพิ่ม backticks เพื่อหลีกเลี่ยง html ของคุณ แต่มันบอกว่าฉันไม่สามารถแก้ไขได้เว้นแต่ฉันจะเพิ่มอักขระอย่างน้อย 6 ตัว
AnnanFay

1
@Annan ไม่จำเป็นใน HTML สิ่งที่คุณกำลังพูดถึงคือการสนับสนุน XHTML stackoverflow.com/questions/1946426/html-5-is-it-br-br-or-br
b1nary.atr0phy

@ b1naryatr0phy na ปัญหาได้รับการแก้ไขแล้ว :) โพสต์ต้นฉบับมี<br>แท็กตามตัวอักษรซึ่งจัดรูปแบบโดย stack-overflow เป็นตัวแบ่งบรรทัดตามตัวอักษรในโพสต์
AnnanFay
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.