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>");
}
Ответы
Ответ 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>");
Ответ 7
http://java.sun.com/docs/books/tutorial/uiswing/components/html.html