Java swing:多行标签?

可能重复:
JLabel中的多行文本

我想做这个:

JLabel myLabel = new JLabel(); myLabel.setText("This is\na multi-line string"); 

目前这会产生一个显示的标签

 This isa multi-line string 

我想要这样做,而不是:

 This is a multi-line string 

有什么build议么?

谢谢


编辑:实施解决scheme

方法体内:

 myLabel.setText(convertToMultiline("This is\na multi-line string")); 

帮手法:

 public static String convertToMultiline(String orig) { return "<html>" + orig.replaceAll("\n", "<br>"); } 

您可以在JLabels使用HTML 。 要使用它,你的文本必须以<html>开始。

将你的文本设置为"<html>This is<br>a multi-line string" ,它应该工作。

有关更多信息,请参阅Swing教程:JLabel和Multiline标签(HTML) 。

 public class JMultilineLabel extends JTextArea{ private static final long serialVersionUID = 1L; public JMultilineLabel(String text){ super(text); setEditable(false); setCursor(null); setOpaque(false); setFocusable(false); setFont(UIManager.getFont("Label.font")); setWrapStyleWord(true); setLineWrap(true); } } 

它对我来说看起来完全一样,但它的丑陋

另一种简单的方法(但改变文本样式)是使用一个<pre></pre> html块。

如果您使用的string来自用户input框,则这将持续用户input的任何格式。

例:

 JLabel label = new JLabel("<html><pre>First Line\nSecond Line</pre></html>"); 

在jlabel中编写多行文本的直接过程是:

 JLabel label = new JLabel("<html>First Line<br>Second Line</html>"); 

JLabel或任何Swing组件中使用html的问题是,您必须将其样式设置为html,而不是通常的setFontsetForeground等。如果您确定,那很好。

否则,您可以使用JIDE中的MultilineLabel ,它扩展了JTextArea 。 这是他们的开源Commom层的一部分。

JLabel可以接受HTML代码。 也许你可以尝试使用“<br>”标签。

例如:JLabel myLabel = new JLabel(); myLabel.setText(“这是一个多行string”);

我现在没有和我一起使用JDK,所以我不是100%的确认解决scheme,但你可以试试看。

ps请尝试删除<和b和r和>之间的空格。