如何使 JLabel 的文本延伸到另一行?
11 回答
您可以通过将 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);
如果您希望 jLabel Text 自动调整大小,例如在可拉伸的 gridbaglayout 中,只需将其文本放在 html 标签中,如下所示:
JLabel label = new JLabel("<html>First line and maybe second line</html>");
我已将 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>
or<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>";
它将显示如下:
闪烁,闪烁,小星星,
我多么想知道你是什么。
高高在上,
犹如天上的钻石。
这太可怕了。所有这些答案都建议添加到标签文本的开头,并且在 JLabel 的 Java 11(或更早版本)文档中没有一个词表明如果标签的文本恰好以<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);
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);
为什么你要给出复杂的东西......你可以通过放置“\ n”而不是html标签来做到这一点