Dòng mới trong JLabel


107

Làm cách nào để hiển thị một dòng mới trong JLabel ?

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

Chào thế giới!
Vân vân

Đâ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ị:

Xin chào thế giới! Blahblahblah

Thứ lỗi cho tôi nếu đây là một câu hỏi ngớ ngẩn, tôi chỉ đang học một số kiến ​​thức cơ bản về Swing ...


1
Chắc chắn không phải là một câu hỏi ngớ ngẩn. Tôi đã mất một thời gian để tìm ra html cũng có thể hoạt động.
Simon Baars

Câu trả lời:


174

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

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

3
chỉ là một chút chỉnh: sử dụng <br /> thay vì chỉ <br> ... Đây là đề nghị cách để làm việc đó (để không bỏ lỡ bất kỳ thẻ đóng) ... hạnh phúc mã hóa ...
Nitin Bansal

6
@NitinBansal Trên thực tế, trong phiên bản HTML mới, bạn nên để nó là <br>. Nó được gọi là thẻ void. <br /> vẫn hoạt động để tương thích ngược.
gsingh2011

@ gsingh2011: ok ... thats tốt hơn :-)
Nitin Bansal

3
Bất kỳ ý tưởng TẠI SAO JLabel không hỗ trợ dòng mới theo mặc định?
tiếp

2
Bạn thậm chí không cần phải đóng thẻ html. Nếu bạn cần nối văn bản trong thời gian chạy, điều này đơn giản hóa nó rất nhiều!
Roberto

9

Bạn có thể thử và làm đ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 bằng <br/> , không có lỗi.
  • Nó tự động thay thế cuối cùng <>với &lt;&gt;tương ứng, ngăn ngừa một số làm cho tàn phá.

Những gì nó làm là:

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

Tái bút: Tôi rất tiếc khi đánh thức một bài viết cũ như vậy, nhưng dù sao đi nữa, bạn có một đoạn mã đáng tin cậy cho Java của mình!



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ó khi thích hợp.


2

Cảm ơn Aakash đã giới thiệu JIDE MultilineLabel. JIDE's StyledLabel 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 về StyledLabel bên dưới. Nó vẫn là mã nguồn mở và miễn phí.

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


1

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

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


thở dài Tôi đã cố gắng thêm dấu gạch ngược để thoát 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ự.
AnnanFay

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

@ b1naryatr0phy na, sự cố đã được khắc phục :) Bài đăng gốc có một chữ <br> thẻ được định dạng bởi stack-tràn dưới dạng ngắt dòng theo nghĩa đen trong bài đăng.
AnnanFay
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.