1

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

我发现这里解决了几个类似的问题,例如 [这里] Problems to linebreak with an int in JLabel和 [这里]如何为除最后一行之外的所有行添加换行符?,以及其他一些人,但他们似乎都不适合我。

打印到 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);

再次感谢大家。

4

5 回答 5

2

您将不得不使用 <html> 和 <br> 在 JLabel Swing 组件中获取换行符。

于 2012-06-26T13:13:34.683 回答
2

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

于 2012-06-26T13:13:52.500 回答
2

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

如果您新闻自动换行,我建议使用 JTexrArea。您可以将其设为不可编辑并设置样式,使其看起来像一个标签。

于 2012-06-26T13:16:10.050 回答
2

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

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

  • 在这种情况下,文档可以以某种方式进行装饰或样式化,然后使用JEditorPane 或 JTextPane

于 2012-06-26T13:17:30.003 回答
2

你可以看看这个教程: http ://docs.oracle.com/javase/tutorial/uiswing/components/html.html

其中一个示例是使用 html 将 JButton 文本设置为两行。它应该非常相似。

于 2012-06-26T13:27:03.757 回答