【问题标题】:Including linebreak in StringBuilder在 StringBuilder 中包含换行符
【发布时间】:2012-06-26 13:10:15
【问题描述】:

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

我发现这里解决了几个类似的问题,例如[这里] Problems to linebreak with an int in JLabel 和 [这里] 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);

再次感谢大家。

【问题讨论】:

标签: java swing newline jlabel stringbuilder


【解决方案1】:

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

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

  • 可以在案例文档中以某种方式装饰或设置样式,然后使用JEditorPane or JTextPane

【讨论】:

  • 谢谢 mKorbel,我将其更改为 JTextpane,现在它的格式正确。非常感谢。
  • 顺便说一句,虽然这很好用,但启动需要一段时间。有没有更有效的方法来做到这一点? (没有明显的“不要使用 Java”。)
  • 所有编程语言都使用相同的 start_up,加上减去 citibus,
【解决方案2】:

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

【讨论】:

  • 谢谢吉尔伯特,我已经尝试过使用这个:mList.append("内存位置:" + i + " " + memLocList[i] + "
    ") ;但也没有运气。
  • @Robert:可能我没看懂你写了什么,但是休息后你没有文字。
  • @Gilbert:对不起,我的补充意见不是很清楚。它是循环的一部分,我希望在每次迭代后换行。
  • @罗伯特:好的。正如您所评论的,JTextPane 更适合您想要的。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-30
        • 1970-01-01
        • 1970-01-01
        • 2022-06-28
        • 2018-06-06
        • 1970-01-01
        相关资源
        最近更新 更多