Java swing:多行标签?

bgu*_*uiz 50 java string swing jlabel multiline

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

我想做这个:

JLabel myLabel = new JLabel();
myLabel.setText("This is\na multi-line string");
Run Code Online (Sandbox Code Playgroud)

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

This isa multi-line string
Run Code Online (Sandbox Code Playgroud)

我希望它能做到这一点:

This is
a multi-line string
Run Code Online (Sandbox Code Playgroud)

有什么建议?

谢谢


编辑:实施解决方案

在方法体中:

myLabel.setText(convertToMultiline("This is\na multi-line string"));
Run Code Online (Sandbox Code Playgroud)

辅助方法:

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

Pet*_*ang 62

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

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

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


Whi*_*cal 13

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);
    }
} 
Run Code Online (Sandbox Code Playgroud)

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

  • 感谢您提供有用的答案!为了美化一下,您还可以删除线条边框,添加插图,并垂直居中对齐: setBorder(new EmptyBorder(5, 5, 5, 5)); setAlignmentY(JLabel.CENTER_ALIGNMENT); (2认同)

Aus*_*ney 7

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

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

例:

JLabel label = new JLabel("<html><pre>First Line\nSecond Line</pre></html>"); 
Run Code Online (Sandbox Code Playgroud)


小智 5

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

例子:

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


小智 5

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

JLabel label = new JLabel("<html>First Line<br>Second Line</html>"); 
Run Code Online (Sandbox Code Playgroud)


Geo*_*eng 5

在使用HTML的问题JLabel或任何Swing组件是,你再要的风格为HTML,不跟平时setFont,setForeground等等.如果你确定这一说法,细.

否则你可以使用像JIDE的MultilineLabel这样的东西,它可以扩展JTextArea.它是他们的开源Commom Layer的一部分.