Jam*_*ame 47 java swing jlabel
我在JLabel中显示一些文本.基本上我是动态生成该文本,然后我应用一些HTML标签(例如,BR
和B
)来格式化文本.最后,我将此格式化文本分配给我的JLabel.
现在我希望我的Jlabel在到达屏幕末尾时自动将文本换行到下一行,就像Note Pad中的"Word Wrap"功能一样.
我怎样才能做到这一点?
And*_*son 92
可以为body
使用HTML样式(CSS)设置宽度.这反过来将决定要渲染的行数,从而确定标签的首选高度.
在CSS中设置宽度可以避免计算标签中出现换行符(或最佳大小)的位置.
import javax.swing.*;
public class FixedWidthLabel {
public static void main(String[] srgs) {
final String s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eu nulla urna. Donec sit amet risus nisl, a porta enim. Quisque luctus, ligula eu scelerisque gravida, tellus quam vestibulum urna, ut aliquet sapien purus sed erat. Pellentesque consequat vehicula magna, eu aliquam magna interdum porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed sollicitudin sapien non leo tempus lobortis. Morbi semper auctor ipsum, a semper quam elementum a. Aliquam eget sem metus.";
final String html = "<html><body style='width: %1spx'>%1s";
Runnable r = () -> {
JOptionPane.showMessageDialog(
null, String.format(html, 200, s));
JOptionPane.showMessageDialog(
null, String.format(html, 300, s));
};
SwingUtilities.invokeLater(r);
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*anP 29
如果你把文字包起来应该工作 <html>...</html>
更新: 您也应该设置最大尺寸.
Hov*_*els 11
一种方法是使用a JTextArea
而不是JLabel
with setWrapStyleWord
和setLineWrap
设置为true并使用设置使其外观和行为类似于JLabel
(删除边框,使其不透明,使其不可编辑且不可聚焦).
否则,如果你绝对需要使用a JLabel
,你将被迫使用FontMetrics来测量你的文本,检查空格,然后自己在适当的位置添加HTML断点.
我发现这个解决方案是最简单的,也适用于调整大小.除了将文本包装在<html>
标签中之外,还必须将标签放入一个尊重首选高度的容器中,并将宽度设置为最大值.例如,您可以将标签放入a的NORTH BorderLayout
.
这是一个简单但完整的工作程序来说明这一点.您可以以任何方式调整框架的大小; 标签将占据整个宽度,高度将相应调整以包裹文本.请注意,我正在做的就是使用<html>
标签并将标签放在.的NORTH中BorderLayout
.
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.Dimension;
public class LabelWrap {
public static JPanel createPanel() {
JLabel label = new JLabel();
label.setText("<html>"
+ "<h3>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h3>"
+ "<p>Duis a tincidunt urna. Phasellus tristique interdum mauris, "
+ "ut vestibulum purus suscipit eget. Aenean massa elit, accumsan "
+ "non faucibus vel, dictum placerat urna. In bibendum est sagittis "
+ "urna iaculis quis sagittis velit commodo. Cum sociis natoque "
+ "penatibus et magnis dis parturient montes, nascetur ridiculus "
+ "mus. Nam quis lacus mauris. Phasellus sem libero, convallis "
+ "mattis sagittis vel, auctor eget ipsum. Vivamus molestie semper "
+ "adipiscing. In ac neque quis elit suscipit pharetra. Nulla at "
+ "orci a tortor consequat consequat vitae sit amet elit. Praesent "
+ "commodo lacus a magna mattis vehicula. Curabitur a hendrerit "
+ "risus. Aliquam accumsan lorem quis orci lobortis malesuada.</p>"
+ "<p>Proin quis viverra ligula. Donec pulvinar, dui id facilisis "
+ "vulputate, purus justo laoreet augue, a feugiat sapien dolor ut "
+ "nisi. Sed semper augue ac felis ultrices a rutrum dui suscipit. "
+ "Praesent et mauris non tellus gravida mollis. In hac habitasse "
+ "platea dictumst. Vestibulum ante ipsum primis in faucibus orci "
+ "luctus et ultrices posuere cubilia Curae; Vestibulum mattis, "
+ "tortor sed scelerisque laoreet, tellus neque consectetur lacus, "
+ "eget ultrices arcu mi sit amet arcu. Nam gravida, nulla interdum "
+ "interdum gravida, elit velit malesuada arcu, nec aliquam lectus "
+ "velit ut turpis. Praesent pretium magna in nibh hendrerit et "
+ "elementum tellus viverra. Praesent eu ante diam. Proin risus "
+ "eros, dapibus at eleifend sit amet, blandit eget purus. "
+ "Pellentesque eu mollis orci. Sed venenatis diam a nisl tempor "
+ "congue.</p>"
+ "</html>");
JPanel panel = new JPanel(new BorderLayout());
panel.add(label, BorderLayout.NORTH);
panel.setPreferredSize(new Dimension(640, 480));
return panel;
}
/**
* @param args
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(createPanel());
frame.pack();
frame.setVisible(true);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
48422 次 |
最近记录: |