Java качели:Многострочные метки?[дубликат]
Вопрос
Возможный Дубликат:
Многострочный текст в 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>");