Java swing: многострочные метки? [дубликат]

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

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

JLabel myLabel = new JLabel();
myLabel.setText("This isna multi-line string");

в настоящее время это выливается в метки

This isa multi-line string

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

This is
a multi-line string

какие предложения?

спасибо


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

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

myLabel.setText(convertToMultiline("This isna multi-line string"));

помощник метод:

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

7 ответов


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

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

посмотреть Свинг Учебник: 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);
    }
} 

он полностью выглядит одинаково для меня, но его уродливый


еще один простой способ (но немного меняет стиль текста) - использовать <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, etc. Если ты не против, хорошо.

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



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

пример:

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