Search code examples
javaswingnewlinejlabelstringbuilder

Including linebreak in StringBuilder


I'm having trouble trying to get a linebreak included in a Stringbuilder to appear in a JLabel.

I've found a couple of similar problems solved here, e.g. [here] Problems to linebreak with an int in JLabel and [here] How do I append a newline character for all lines except the last one? , along with a few others but none of them seem to work for me.

When printing to System.out, it works fine and I get a new line each time but when passed to a JLabel, everything appears as one line.

Here's the current version of the code, which has attempted to append a newline character, as well as including one in the main declaration. Neither has any effect when passed to the 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;
}

I've also tried using System.getProperty(line.separator) with similar results and can't think of anything else to try so thought I'd appeal for help here.

Thanks, Robert.

-EDIT-

Thanks to mKorbel, changing the JLabel to a JTextPane solved it. The two lines in question are:

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

Thanks again to everyone.


Solution

  • JLabel isn't designated to held multilines document, there are two choices (by accepting newline or tab by default)

    • if document could not be decorated or styled somehow then to use JTextArea

    • in the case document could be decorated or styled somehow then to use JEditorPane or JTextPane