2009-07-07 31 views
81

Tôi làm cách nào để hiển thị dòng mới trong JLabel?Dòng mới trong JLabel

Ví dụ, nếu tôi muốn:

Hello World!
blahblahblah

Đây là những gì tôi có ngay bây giờ:

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

Đây là những gì được hiển thị: blahblahblah

Hello World

tha thứ cho tôi nếu điều này! là một câu hỏi ngớ ngẩn, tôi chỉ học một số khái niệm cơ bản về Swing ...

+0

Chắc chắn không phải là một câu hỏi ngớ ngẩn. Đã cho tôi một thời gian để tìm ra html đã có thể trong swing quá. –

Trả lời

138

Bao quanh chuỗi với <html></html> và ngắt dòng bằng <br/>.

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

chỉ cần chỉnh sửa một chút: sử dụng
thay vì chỉ
... đây là cách được khuyến nghị để làm điều đó (không bỏ lỡ bất kỳ thẻ đóng) ... mã hóa hạnh phúc ... –

+5

@NitinBansal Thực ra nó được đề xuất trong phiên bản HTML mới để nó là
. Nó được gọi là một thẻ void.
vẫn hoạt động để tương thích ngược. – gsingh2011

+0

@ gsingh2011: ok ... thats better :-) –

1

JLabel thực sự là khả năng hiển thị một số HTML thô sơ, đó là lý do tại sao nó không đáp ứng với việc bạn sử dụng kí tự xuống dòng (không giống như, nói, System.out).

Nếu bạn đặt trong HTML tương ứng và sử dụng <BR>, bạn sẽ nhận được dòng mới của mình.

+0

* sigh * Tôi đã cố gắng thêm backticks để thoát khỏi html của bạn, tuy nhiên nó nói rằng tôi không thể chỉnh sửa trừ khi tôi thêm ít nhất 6 ký tự. – Annan

+1

@Annan Điều đó không cần thiết trong HTML. Những gì bạn đang nói đến là để hỗ trợ XHTML. http://stackoverflow.com/questions/1946426/html-5-is-it-br-br-br-or-br –

+0

@ b1naryatr0phy na, sự cố đã được khắc phục :) Bài đăng gốc có chữ '
'theo nghĩa đen được định dạng bởi ngăn xếp chồng lấp như một ngắt dòng chữ trong bài đăng. – Annan

2

Bạn có thể làm

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

và nó sẽ tự động quấn nó nơi thích hợp.

2

Cảm ơn Aakash đã đề xuất JIDE MultilineLabel. StyledLabel của JIDE cũng được cải tiến gần đây để hỗ trợ nhiều dòng. Tôi muốn giới thiệu nó trên MultilineLabel vì nó có nhiều tính năng tuyệt vời khác. Bạn có thể xem một bài viết trên StyledLabel bên dưới. Nó vẫn là nguồn mở và miễn phí.

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

4

Bạn có thể thử và làm được điều này:

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

Những lợi thế của việc này là:

  • Nó thay thế tất cả các dòng mới với <br/>, chắc chắn thế.
  • Tự động thay thế lần lượt <> tương ứng với &lt;&gt;, ngăn một số lỗi hiển thị.

gì nó làm là:

  • "<html>" + thêm một khe hở html thẻ vào đầu
  • .replaceAll("<", "&lt;").replaceAll(">", "&gt;") thoát <> để thuận tiện
  • .replaceAll("\n", "<br/>") thay thế tất cả các dòng mới bởi br (ngắt dòng HTML) cho những gì bạn muốn
  • ... và + "</html>" đóng thẻ html của chúng tôi ở cuối.

P .: Tôi rất tiếc khi đánh thức một bài đăng cũ như vậy, nhưng bất cứ điều gì, bạn có đoạn mã đáng tin cậy cho Java của mình!