在StringBuilder中包含换行符

时间:2012-06-26 13:10:15

标签: java swing newline jlabel stringbuilder

我在尝试让Stringbuilder中包含的换行符出现在JLabel中时遇到了麻烦。

我发现这里解决了几个类似的问题,例如: [这里] Problems to linebreak with an int in JLabel和[here] How do I append a newline character for all lines except the last one?,以及其他几个,但似乎没有一个适合我。

当打印到System.out时,它工作正常,我每次都会得到一个新行,但是当传递给JLabel时,所有内容都显示为一行。

这是代码的当前版本,它试图附加换行符,并在主声明中包含一个换行符。传递给JLabel时都没有任何影响:

public void layoutCenter() {
    JPanel central = new JPanel();
    add(central, BorderLayout.CENTER);

    JTabbedPane tabs = new JTabbedPane();
    this.add(tabs);

    // memory tab
    StringBuilder mList = new StringBuilder();
    memLocList = new Memory[MEM_LOCATIONS]; //Memory is a separate class
    for (int i = 0; i < memLocList.length; i++) {
        mList.append("\n");
        memLocList[i] = null;
        mList.append("Memory location: " + i + " " + memLocList[i] + "\n");
    }
    System.out.println(mList.toString());

    JComponent memTab = makeTextPanel(mList.toString());
    tabs.addTab("Memory", memTab);

}

protected JComponent makeTextPanel(String text) {
    JPanel panel = new JPanel(false);
    JLabel filler = new JLabel(text);
    panel.add(filler);
    return panel;
}

我也尝试过使用类似结果的System.getProperty(line.separator),并且无法想到其他任何事情,所以我想在这里寻求帮助。

谢谢, 罗伯特。

- 编辑 -

感谢mKorbel,将JLabel更改为JTextPane解决了这个问题。 有问题的两条线是:

JTextPane filler = new JTextPane();
    filler.setText(text);

再次感谢大家。

5 个答案:

答案 0 :(得分:2)

你将不得不使用&lt; html&gt;和&lt; br&gt;在JLabel Swing组件中获取换行符。

答案 1 :(得分:2)

如果你绝对必须使用JLabel,那么我建议每行使用一个。

答案 2 :(得分:2)

您可以通过将文本包装在HTML标记中并使用br标记添加新行来使JLabel拥有多行。

如果你有新闻自动包装我建议使用JTexrArea。你可以使它不可编辑并设计它,使它看起来像一个标签。

答案 3 :(得分:2)

JLabel未指定持有多行文档,有两种选择(默认情况下接受换行符或制表符)

  • 如果无法以某种方式对文档进行装饰或样式设置,请使用JTextArea

  • 案件文件中的
  • 可以某种方式进行装饰或设计,然后使用JEditorPane or JTextPane

答案 4 :(得分:2)

您可以查看本教程: http://docs.oracle.com/javase/tutorial/uiswing/components/html.html

其中一个例子是使用html为JButton文本创建两行。它应该非常相似。