Вопрос

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

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

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

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

This isa multi-line string

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

This is
a multi-line string

Есть какие-нибудь предложения?

Спасибо


Редактировать:Реализованное решение

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

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

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

public static String convertToMultiline(String orig)
{
    return "<html>" + orig.replaceAll("\n", "<br>");
}
Это было полезно?

Решение

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

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

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

Другие советы

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);
    }
} 

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

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

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

Пример:

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

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

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

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

В противном случае вы можете использовать что-то вроде Многострочная метка из ДЖИДА, который простирается JTextArea.Это часть их открытого исходного кода Общий слой.

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

Пример:

JLabel myLabel = new JLabel();
myLabel.setText("<html> This is a <br> multi-line string </html>");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top