Java HTML-рендеринг размеров «pt» и «px»

Я столкнулся с проблемой указания ширины html-элемента в JLabel и подумал, что запущу его здесь на флагштоке и посмотрю, есть ли у кого-нибудь какие-нибудь советы.

Когда я указываю ширину элемента, используя значение единицы «px», результирующий размер на самом деле составляет ~ 133%, тогда как, если я не использую единицу измерения или использую «pt», я получаю точный размер, который я указал.

В приведенном ниже примере, если вы измените «Ширина: 100 пикселей» на «Ширина: 100 пикселей», вы получите правильный размер.

Этот ответ 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);
    }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
216
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, я думаю, что нашел «причину» (или виновника) для значений пикселей масштабирования Java.

В реализации HTMLEditorKit есть класс CSS, который обрабатывает элементы CSS. Он имеет таблицу со значениями масштабирования для каждой поддерживаемой единицы. (начиная со строки 2843 в CSS.class)

Для «pt» это сопоставление 1-к-1. Для «px» это отображение от 1 до 1,3. Есть даже комментарий, в котором говорится:

// Not sure about 1.3, determined by experiementation.

На самом деле есть две таблицы сопоставления, где вторая используется, если включен режим w3c. У него есть режимы масштабирования, которые отстают от первой таблицы:

Для «pt» это разрешение 1 на экран/72 точки на дюйм. Для «px» это отображение 1-к-1.

Я не уверен, что активирует режим w3c, но остерегайтесь этой проблемы.

w3c mdoe включен W3C_LENGTH_UNITSdocs.oracle.com/javase/7/docs/api/javax/swing/…

user996142 08.10.2020 15:39

Другие вопросы по теме