Java:JLabels中的换行符?

Nic*_*ner 23 java user-interface swing jlabel

我正在尝试使用多行文本制作Swing JLabel.它添加得很好,但换行没有通过.我该怎么做呢?或者,我可以只为JLabel指定一个最大宽度,并知道文本会换行,就像在div中一样吗?

    private void addLegend() {
        JPanel comparisonPanel = getComparisonPanel();

        //this all displays on one line
        JLabel legend = new JLabel("MMM FFF MMM FFFO O OOM   M MMMM.\nMMM FFF MMM FFFO O OOM   M MMMM.\nMMM FFF MMM FFFO O OOM   M MMMM.\n"); 

        comparisonPanel.add(legend);        
    }
Run Code Online (Sandbox Code Playgroud)

Eri*_*ler 45

在setText中使用HTML,例如

myLabel.setText("<html><body>with<br>linebreak</body></html>");
Run Code Online (Sandbox Code Playgroud)

  • 或者如果你想要它更动态,那么你可以使用html中的宽度css或width属性,参见[这里](http://stackoverflow.com/questions/2420742/make-a-jlabel-wrap-its-text逐设置-A-最大宽度/ 3194997#3194997) (2认同)

Sam*_*erg 9

默认情况下,Swing不会换行文本.如果在JLabel上指定一个大小,它将只绘制适合的文本部分,然后在末尾添加"...".

如建议您可以使用HTML来启用换行.但是,我实际上不久前创建了一个自定义Swing UI委托来实现这一目标甚至更多:MultiLineLabelUI.

它将包装您的文本以适应可用空间并且还尊重硬线断点.如果您选择试用它,它就像:

JLabel label = new JLabel("Text that'll wrap if necessary");
label.setUI(MultiLineLabelUI.labelUI);
Run Code Online (Sandbox Code Playgroud)

或者使用自定义MultiLineLabel类,除了包装文本外,还支持垂直和水平文本对齐.

UPDATE

我丢失了原始代码示例的域名.它现在可以在github上查看:https://github.com/sasjo/multiline


say*_*iam 9

如果在html中设置段落宽度,则可以获得自动换行符.

  label.setText("<html><p style=\"width:100px\">"+paragraph+"</p></html>");
Run Code Online (Sandbox Code Playgroud)


Ami*_*ani 6

您可以将HTML放在JLabel中并使用linebreak标记来实现此目的.


Ste*_*tew 5

在 JTextArea 中使用换行功能怎么样?

    String text = "some really long string that might need to"+
                  "be wrapped if the window is not wide enough";

    JTextArea multi = new JTextArea(text);
    multi.setWrapStyleWord(true);
    multi.setLineWrap(true);
    multi.setEditable(false);

    JLabel single = new JLabel(text);

    JPanel textpanel = new JPanel(new GridLayout(2,1));
    textpanel.add(multi);
    textpanel.add(single);

    JFrame frame = new JFrame();
    frame.add(textpanel);
    frame.pack();
    frame.setVisible(true);
Run Code Online (Sandbox Code Playgroud)