Як я можу зробити так, щоб текст JLabel поширювався на інший рядок?
Як я можу зробити так, щоб текст JLabel поширювався на інший рядок?
Відповіді:
Ви можете зробити це, вставивши HTML в код, так:
JFrame frame = new JFrame();
frame.setLayout(new GridLayout());
JLabel label = new JLabel("<html>First line<br>Second line</html>");
frame.add(label);
frame.pack();
frame.setVisible(true);
A
у своєму JLabel?" Відповідь: Примусьте JLabel використовувати HTML та використовувати сутність HTMLA
Я використовував JTextArea для багаторядкових JLabels.
JTextArea textarea = new JTextArea ("1\n2\n3\n"+"4\n");
http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextArea.html
Введіть вміст (тобто поле властивості "текст") всередині <html></html>
тегу. Таким чином, ви можете використовувати <br>
або, <P>
щоб вставити новий рядок.
Наприклад:
String labelContent = "<html>Twinkle, twinkle, little star,<BR>How I wonder what you are.<BR>Up above the world so high,<BR>Like a diamond in the sky.</html>";
Він відображатиметься наступним чином:
Миготіння, мерехтіння, зіронько,
Як мені цікаво, що ти.
Вгорі над світом так високо,
Немов діамант у небі.
Ви також можете використовувати JXLabel з бібліотеки SwingX .
JXLabel multiline = new JXLabel("this is a \nMultiline Text");
multiline.setLineWrap(true);
Це жахливо. Усі ці відповіді пропонують додати на початок тексту мітки, і в документації Java 11 (або раніше) для JLabel немає жодного слова, що вказує на те, що текст мітки обробляється по-різному, якщо це трапляється починати з <html>
. Хто каже, що працює скрізь і завжди буде? І ви можете отримати великі, великі сюрпризи, обертаючи довільний текст і передаючи його в механізм HTML-верстки.
Я підтримав відповідь, яка пропонує JTextArea. Але я зауважу, що JTextArea - це не заміна, що випадає; за замовчуванням він розширюється, заповнюючи рядки, не так діє JLabel. Я ще не придумав рішення цього.
У моєму випадку було достатньо розділити текст на кожен, \n
а потім створити JLabel
для кожного рядка:
JPanel panel = new JPanel(new GridLayout(0,1));
String[] lines = message.split("\n");
for (String line : lines) {
JLabel label = new JLabel(line);
panel.add(label);
}
Я використовував вище в JOptionPane.showMessageDialog
Ви можете використовувати JTextArea
та вилучати можливості редагування, щоб отримувати звичайний багаторядковий текст лише для читання.
JTextArea textArea = new JTextArea("line\nline\nline");
textArea.setEditable(false);
У HTML можна використовувати (базовий) CSS .
Це запитання було пов’язане з Multiline JLabels - Java .
String labelText ="<html>Name :"+name+"<br>Surname :"+surname+"<br>Gender :"+gender+"</html>";
JLabel label=new JLabel(labelText);
label.setVisible(true);
label.setBounds(10, 10,300, 100);
dialog.add(label);