我试图与多行文本的一个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);        
    }
有帮助吗?

解决方案

使用HTML中的setText,e.g。

myLabel.setText("<html><body>with<br>linebreak</body></html>");

其他提示

默认情况下,摇摆不换行文本。如果你在一个JLabel指定大小只会画画适合,然后添加文本“......”到最后的部分。

如所建议可以使用HTML,以使换行。不过,其实我已经创建了一个定制的Swing UI委托不久前实现这一点,更是: MultiLineLabelUI

这将包装你的文本以适应可用空间,也尊重硬换行符。如果您选择尝试一下,它是那样简单:

JLabel label = new JLabel("Text that'll wrap if necessary");
label.setUI(MultiLineLabelUI.labelUI);

或可替换地使用,除了环绕文字支持垂直和水平文本对齐定制MultiLineLabel类。

<强>更新

我失去了与原始代码样本域。 https://github.com/sasjo/multiline

如果您在HTML设置段落宽度你可以得到自动断线。

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

您可以把HTML一个JLabel内,并使用断行标签来实现这一目标。

什么在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);

简单,使用HTML。 Java的Swing组件虽然没有为HTML提供了一个“梦幻般的支持,你可以使用它的这种简单的目的。

label.setText("<html>This is first line.<br/>This is second line.</html>");

我没指定标签的最大宽度,但你可以指定一个具体的宽度。 通过测量一个JLabel的当前宽度,我们只能申请新的固定的,如果中的JLabel的宽度是高于我们的maxWidth:

JLabel label = new JLabel("<html>" + myVeryLongMessage + "<html>");
int maxWidth = 400;
Dimension size = label.getPreferredSize();
if (size.width > maxWidth) {
    // Estimate the number of lines
    int lineCount = (int) Math.ceil(((double) size.width) / maxWidth);
    lineCount += 1; // Add one extra line as reserve
    size.width = maxWidth; // Apply the maximum width
    // Increase the height so that all lines will be visible
    size.height *= lineCount;
    label.setPreferredSize(size);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top