Java swing:多行标签?

时间:2010-01-28 06:33:56

标签: java string swing multiline jlabel

  

可能重复:
  Multiline text in JLabel

我想这样做:

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

目前,这会产生一个显示

的标签
This isa multi-line string

我希望它能够做到这一点:

This is
a multi-line string

有什么建议吗?

谢谢


编辑:实施解决方案

在方法体中:

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

帮助方法:

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

7 个答案:

答案 0 :(得分:61)

您可以在HTML中使用JLabels。要使用它,您的文字必须以<html>开头。

将文字设置为"<html>This is<br>a multi-line string",它应该有效。

有关详细信息,请参阅Swing Tutorial: JLabelMultiline label (HTML)

答案 1 :(得分:12)

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);
    }
} 

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

答案 2 :(得分:6)

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

如果您使用的字符串来自用户输入框,这将保留用户输入的任何格式。

示例:

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

答案 3 :(得分:5)

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

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

答案 4 :(得分:5)

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

否则,您可以使用JIDE中MultilineLabel之类的内容,扩展JTextArea。这是他们的开源Commom Layer的一部分。

答案 5 :(得分:3)

JLabel可以接受HTML代码。也许您可以尝试使用<br>标记。

示例:

JLabel myLabel = new JLabel();
myLabel.setText("<html> This is a <br> multi-line string </html>");

答案 6 :(得分:3)