4

我正在尝试使用 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 像素宽。

我究竟做错了什么?

4

3 回答 3

5

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

编辑:JLabel 中的 HTML 非常过时

于 2012-05-21T14:28:05.417 回答
2

您正在设置 HTML 中文本的宽度,而不是JLabel.

使用setPreferredSize方法设置JLabel.

frame.pack();

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

JLabel正如您所见,虽然最好让大小本身适合文本。

于 2012-05-21T14:30:50.453 回答
0

吉尔伯特,我添加了你的代码并得到了这个:

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(600,600),它们都不会产生我正在寻找的东西:一个 200 像素宽并调整了高度的 JLabel。

于 2012-05-21T16:39:03.517 回答