Включая перенос строки в StringBuilder

У меня возникают проблемы с тем, чтобы включить разрыв строки в StringBuilder для отображения в JLabel.

Я нашел здесь пару аналогичных проблем, например [здесь] Проблемы с переносом строки с int в 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);

Еще раз спасибо всем.


person Robert    schedule 26.06.2012    source источник
comment
возможный дубликат новой строки в JLabel   -  person Piotr Praszmo    schedule 26.06.2012


Ответы (5)



Вам придется использовать ‹html› и ‹br›, чтобы получить разрывы строк в компоненте JLabel Swing.

person Gilbert Le Blanc    schedule 26.06.2012
comment
Спасибо, Гилберт, я уже пробовал использовать это: mList.append (‹html› Расположение в памяти: + i + + memLocList [i] + ‹br› ‹/html›); но и с этим не повезло. - person Robert; 26.06.2012
comment
@ Роберт: Может быть, я не понимаю, что вы написали, но у вас нет текста после перерыва. - person Gilbert Le Blanc; 26.06.2012
comment
@ Гилберт: Извините, мой дополнительный комментарий не очень ясен. Это часть цикла, и мне нужно было переносить строку после каждой итерации. - person Robert; 26.06.2012
comment
@ Роберт: Хорошо. Как вы отметили, JTextPane больше подходит для того, что вы хотите. - person Gilbert Le Blanc; 26.06.2012

Если вам абсолютно необходимо использовать JLabel, я предлагаю использовать по одному для каждой строки.

person Radu Murzea    schedule 26.06.2012

Вы можете создать в JLabel несколько строк, заключив текст в теги HTML и используя теги br для добавления новой строки.

Если у вас автоматическая упаковка новостей, я предлагаю использовать JTexrArea. Вы можете сделать его нередактируемым и оформить так, чтобы он выглядел как ярлык.

person Jeff Storey    schedule 26.06.2012

Вы можете посмотреть это руководство: http://docs.oracle.com/javase/tutorial/uiswing/components/html.html.

В одном из примеров используется html, чтобы сделать его двумя строками для текста JButton. Это должно быть очень похоже.

person evanwong    schedule 26.06.2012