在下面的示例中,我首先尝试使用getPrefferedSize方法布局标签的文本,然后使用生成的宽度和高度在样式标记中再次布局文本。
然而,对于每个新布局,标签的宽度和高度都在逐渐增加(只是为了确保我将填充,边框和边距设置为零)。
有没有人知道克服这种情况的方法(即在样式标记中设置宽度和高度,导致从getPrefferedSize返回相同的宽度和高度)?
我尝试了几件事,例如使用SwingUtilities.layoutCompoundLabel或JLabel with HTML does not set width properly中提供的指南,但没有任何工作按预期进行。
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Test
{
public static void main (String args[])
{
String text = "TEST <br> TEST2";
JLabel localrenderer = new JLabel("");
String labeltext = String.format("<html><div style=\"padding:0px;margin:0px;border:0px;\">%s</div><html>", text);
localrenderer.setText(labeltext);
int width1 = localrenderer.getPreferredSize().width;
int height1 = localrenderer.getPreferredSize().height;
System.out.println("FIRST run: "+width1+"-"+height1);
labeltext = String.format("<html><div style=\"padding:0px;margin:0px;border:0px;height:%dpx;width:%dpx\">%s</div><html>", height1, width1, text);
JLabel localrenderer2 = new JLabel(labeltext);
width1 = localrenderer2.getPreferredSize().width;
height1 = localrenderer2.getPreferredSize().height;
System.out.println("SECOND run: "+width1+"-"+height1);
labeltext = String.format("<html><div style=\"padding:0px;margin:0px;border:0px;height:%dpx;width:%dpx\">%s</div><html>", height1, width1, text);
JLabel localrenderer3 = new JLabel(labeltext);
width1 = localrenderer3.getPreferredSize().width;
height1 = localrenderer3.getPreferredSize().height;
System.out.println("THIRD run: "+width1+"-"+height1);
JFrame testframe = new JFrame();
JPanel testpanel = new JPanel();
testpanel.add(localrenderer);
testpanel.add(localrenderer2);
testpanel.add(localrenderer3);
testframe.add(testpanel);
testframe.pack();
testframe.setVisible(true);
}
}
编辑:现在还显示标签。虽然显示不是真正的问题,但设置和获取包含HTML的JLabel的属性。