为什么JLabel不尊重样式标签中设置的宽度和高度?

时间:2015-01-21 09:47:30

标签: java html jlabel

在下面的示例中,我首先尝试使用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的属性。

0 个答案:

没有答案