用的JLabel HTML没有设置正确的宽度(JLabel with HTML does not s

2019-09-17 09:02发布

我想设置使用HTML div标签的一个JLabel的宽度。

考虑下面的代码:

import javax.swing.*;

public class Xyzzy extends JFrame{
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Xyzzy frame = new Xyzzy();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.PAGE_AXIS));

                String s = "x ";
                for (int i=0; i<200; ++i)
                    s += "x ";

                JLabel jl = new JLabel("<html><div style=\"width: 300px;\">" + s + "</div></html>");

                frame.add(jl);

                frame.setSize(600, 600);
                frame.setVisible(true);
            }
        });
    }
}

我本来期望JLabel以300个像素宽,但在现实中,它是约390像素宽。 如果我改变宽度规范至200像素,所得到的标签是约260像素宽。

我究竟做错了什么?

Answer 1:

这HTML代码JLabel的(支持HTML规范的唯一部分)太复杂http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-JLabel.html
组件的大小取决于布局。 我喜欢MigLayout http://www.miglayout.com 简明教程

编辑:HTML中的JLabel是非常过时



Answer 2:

你设置文本的宽度在HTML中,不宽JLabel

使用setPreferredSize方法来设置的宽度JLabel

frame.pack();

Dimension d = label.getSize();
d.width = width;
label.setPreferredSize(d);

虽然这是更好地让JLabel大小本身,使文本以适应,如您所见。



Answer 3:

吉尔伯特,我加你的代码,这样结束了:

import javax.swing.*;
import java.awt.*;

public class Xyzzy extends JFrame{
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Xyzzy frame = new Xyzzy();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.PAGE_AXIS));

                String s = "x ";
                for (int i=0; i<200; ++i)
                    s += "x ";

                JLabel jl = new JLabel("<html>" + s + "</html>");

                frame.add(jl);
                frame.pack();

                Dimension d = jl.getSize();
                d.width = 200;
                jl.setPreferredSize(d);

                frame.setSize(600, 600);

                frame.setVisible(true);
            }
        });
    }
}

这根本不起作用。 我也试图消除HTML标签和frame.setSize(600600),两者都不生产什么我在寻找:一个JLabel 200个像素宽,已经调整了其高度。



文章来源: JLabel with HTML does not set width properly