Подтвердить что ты не робот

Java swing: многострочные метки?

Возможный дубликат:
Многострочный текст в JLabel

Я хочу сделать это:

JLabel myLabel = new JLabel();
myLabel.setText("This is\na multi-line string");

В настоящее время это приводит к метке, которая отображает

This isa multi-line string

Я хочу, чтобы он сделал это вместо:

This is
a multi-line string

Любые предложения?

Спасибо


EDIT: Реализованное решение

В теле метода:

myLabel.setText(convertToMultiline("This is\na multi-line string"));

Вспомогательный метод:

public static String convertToMultiline(String orig)
{
    return "<html>" + orig.replaceAll("\n", "<br>");
}
4b9b3361

Ответ 1

Вы можете использовать HTML в JLabels. Чтобы использовать его, ваш текст должен начинаться с <html>.

Установите текст в "<html>This is<br>a multi-line string", и он должен работать.

Смотрите Swing Tutorial: JLabel и Многострочная метка (HTML) для получения дополнительной информации.

Ответ 2

public class JMultilineLabel extends JTextArea{
    private static final long serialVersionUID = 1L;
    public JMultilineLabel(String text){
        super(text);
        setEditable(false);  
        setCursor(null);  
        setOpaque(false);  
        setFocusable(false);  
        setFont(UIManager.getFont("Label.font"));      
        setWrapStyleWord(true);  
        setLineWrap(true);
        //According to Mariana this might improve it
        setBorder(new EmptyBorder(5, 5, 5, 5));  
        setAlignmentY(JLabel.CENTER_ALIGNMENT);
    }
} 

Для меня это выглядит одинаково, но это ужасно

Ответ 3

Еще один простой способ (но немного изменить стиль текста) - использовать блок <pre></pre> html.

Это будет сохраняться в любом форматировании, введенном пользователем, если строка, которую вы используете, вышла из окна ввода пользователя.

Пример:

JLabel label = new JLabel("<html><pre>First Line\nSecond Line</pre></html>"); 

Ответ 4

Прямая процедура написания многострочного текста в jlabel:

JLabel label = new JLabel("<html>First Line<br>Second Line</html>"); 

Ответ 5

Проблема с использованием html в JLabel или любом компоненте Swing заключается в том, что вам нужно стилизовать его как html, а не с обычными setFont, setForeground и т.д. Если вы в порядке с этим, отлично.

В противном случае вы можете использовать что-то вроде MultilineLabel из JIDE, которое расширяет JTextArea. Это часть их открытого источника Commom Layer.

Ответ 6

JLabel может принять HTML-код. Может быть, вы можете попробовать использовать тег <br>.

Пример:

JLabel myLabel = new JLabel();
myLabel.setText("<html> This is a <br> multi-line string </html>");