【问题标题】:Java HTML rendering "pt" vs. "px" sizesJava HTML 呈现“pt”与“px”大小
【发布时间】:2019-10-16 06:29:56
【问题描述】:

我在 JLabel 中指定 html 元素的宽度时遇到了问题,我想我会在这里把它放在旗杆上,看看是否有人有任何建议。

当我使用“px”单位值指定元素的宽度时,结果大小实际上是 ~133%,而如果我不使用单位或使用“pt”,我得到的确切大小是指定。

在下面的示例中,如果将“width: 100px”更改为“width:100pt”,您将获得正确的尺寸。

这个答案https://stackoverflow.com/a/6257861/131795 似乎是相关的,72 dpi 调整似乎与我在示例中看到的不匹配匹配。

我可能在这里对一段古老的代码大发雷霆,但是为什么要转换绝对 px 值而将 pt 值视为绝对值?

public class test {
    public static void main(String args[]) {
        JFrame frame = new JFrame();

        JLabel label = new JLabel("<html><div style='width: 100px; background-color: red;'>test</div>");
        frame.getContentPane().add(label);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 200);
        frame.setVisible(true);
    }
}

【问题讨论】:

    标签: java swing


    【解决方案1】:

    好的,我想我找到了 java 缩放像素值的“原因”(或罪魁祸首)。

    在 HTMLEditorKit 实现中,有一个 CSS 类来处理 css 内容。它有一个表格,其中包含每个受支持单位的缩放值。 (从 CSS.class 的第 2843 行开始)

    对于“pt”,是一对一的映射。对于“px”,它的 1 到 1.3 映射。 甚至有评论说:

    // 不确定1.3,由实验确定。

    实际上有两个映射表,如果打开了 w3c 模式,则使用第二个映射表。它具有从第一个表向后的缩放模式:

    对于“pt”,它是 1-to-screenres/72dpi。对于“px”,它是一对一的映射。

    我不确定是什么激活了 w3c 模式,但请注意这个问题。

    【讨论】:

    猜你喜欢
    • 2016-12-18
    • 2017-01-22
    • 2011-04-13
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 2020-12-19
    相关资源
    最近更新 更多