56

可能重复:
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>");
}
4

7 回答 7

70

您可以HTMLJLabels. 要使用它,您的文本必须以<html>.

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

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

于 2010-01-28T06:46:40.270 回答
20
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);
        //According to Mariana this might improve it
        setBorder(new EmptyBorder(5, 5, 5, 5));  
        setAlignmentY(JLabel.CENTER_ALIGNMENT);
    }
} 

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

于 2012-06-14T13:42:02.680 回答
7

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

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

例子:

JLabel label = new JLabel("<html><pre>First Line\nSecond Line</pre></html>"); 
于 2010-09-25T02:00:51.070 回答
5

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

例子:

JLabel myLabel = new JLabel();
myLabel.setText("<html> This is a <br> multi-line string </html>");
于 2010-01-28T06:44:24.510 回答
5

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

JLabel label = new JLabel("<html>First Line<br>Second Line</html>"); 
于 2010-01-28T08:38:21.237 回答
5

在或任何 Swing 组件中使用 html 的问题JLabel在于,您必须将其样式化为 html,而不是通常setFont的 ,setForeground等。如果您对此表示满意,那很好。

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

于 2010-09-25T19:30:50.827 回答
1

http://java.sun.com/docs/books/tutorial/uiswing/components/html.html

于 2010-01-28T08:36:46.913 回答