是否有JLabel的“自动换行”属性?

我正在JLabel中显示一些文本。 基本上我是动态生成该文本,然后应用一些HTML标记(例如BRB )来格式化文本。 最后,我将这个格式化的文本分配给我的JLabel。

现在我希望我的Jlabel在文本到达屏幕末尾时自动将文本包装到下一行,如记事本中的“文字包装”功能。

我怎样才能做到这一点?


如果将文本包装在<html>...</html>应该可以工作

更新:那么你应该设置最大尺寸。


可以使用HTML样式(CSS)为body设置宽度。 这反过来将确定要渲染的行数,并从中决定标签的首选高度。

在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 html1 = "<html><body style='width: ";
        final String html2 = "px'>";

        Runnable r = new Runnable() {

            @Override
            public void run() {
                JOptionPane.showMessageDialog(
                        null, new JLabel(html1 + "200" + html2 + s));
                JOptionPane.showMessageDialog(
                        null, new JLabel(html1 + "300" + html2 + s));
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

在这里输入图像描述在这里输入图像描述


一种方法是使用JTextArea而不是JLabelsetWrapStyleWordsetLineWrap设置为true,并使其设置为使其外观和行为类似JLabel (删除边框,使其不透明,使其不可编辑,可聚焦)。

否则,如果您绝对需要使用JLabel ,您将被迫使用FontMetrics来测量文本,检查空格,然后自己将HTML硬解决方案添加到适当的位置。

链接地址: http://www.djcxy.com/p/88883.html

上一篇: Is there a "word wrap" property for JLabel?

下一篇: Java Swing revalidate() vs repaint()