我正在尝试使用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像素。如果我将宽度规格更改为200px,则生成的标签宽度约为260像素。
我做错了什么?
答案 0 :(得分:6)
这个html代码对于JLabel来说太复杂了(仅支持HTML规范的一部分)
http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-JLabel.html
组件的大小取决于布局。
我更喜欢MigLayout http://www.miglayout.com simple tutorial
编辑:JLabel中的HTML非常过时
答案 1 :(得分:2)
您在HTML中设置文本的宽度,而不是JLabel
的宽度。
使用setPreferredSize
方法设置JLabel
。
frame.pack();
Dimension d = label.getSize();
d.width = width;
label.setPreferredSize(d);
虽然最好让JLabel
尺寸本身允许文字适合,正如您所见。
答案 2 :(得分: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并调整了它的高度。