Могу ли я установить разрешение DPI моего приложения Java Swing без изменения настроек DPI системы?

У меня есть Java-приложение, использующее Substance LookAndFeel с Windows в качестве целевой платформы, и я хочу увеличить настройку DPI моего приложенияwithout изменение настроек системы.

Я хочу сделать это, потому что я не хочу заставлять пользователя перезагружать Windows и потому что многие приложения Windows, похоже, имеют проблемы с очень высокими настройками DPI (& gt; 120)

PS: я знаю, что Substance LaF позволяет масштабировать размер шрифта во время выполнения, но таким образом масштабируется только высота моих элементов управления, а не ширина. Я хочу, чтобы мой графический интерфейс полностью масштабировался, как это было бы, если бы я установил настройку DPI системы.

 Epaga05 мар. 2010 г., 10:04
+1, просто собирался спросить то же самое. :)

Ответы на вопрос(3)

Решение Вопроса

Не знаю, возможно ли это. Внешний вид должен поддерживать его, и, насколько мне известно, Windows Look & Feel не поддерживает. Вот хак, который вы можете рассмотреть: переберите все шрифты, определенные в вашем внешнем виде, и переопределите их, чтобы они были чуть больше. Вот фрагмент кода, который делает это:

for (Iterator i = UIManager.getLookAndFeelDefaults().keySet().iterator(); i.hasNext();) {
    String key = (String) i.next();
    if(key.endsWith(".font")) {
        Font font = UIManager.getFont(key);
        Font biggerFont = font.deriveFont(2.0f*font.getSize2D());
        // change ui default to bigger font
        UIManager.put(key,biggerFont);
    }
}

Я полагаю, вы могли бы сделать еще один шаг и пропорционально переопределить границы шкалы, но это очень быстро усложняется

 12 апр. 2017 г., 20:27
Добавлено toString, чтобы закончить, решил проблему для меня String key = (String) i.next (). ToString ();
 10 сент. 2015 г., 19:20
Не работает из-за преобразования в строки.
 11 окт. 2010 г., 00:53
Если твойUIManager имеет ключи, которые не являютсяStringsтогда это будет кидаетClassCastException.
 Daniel Rikowski12 нояб. 2009 г., 21:19
Лучший ответ пока :)

нет, вы не можете. Это действительно облом, потому что это испытывает боль.

JRE 9.

Это связано с тем, что среда выполнения Java объявила себя «DPI-осведомленной». но на самом деле не поддерживал его для AWT и Swing. Java-приложения были измерены и отображены на основе пикселей, а не должным образом масштабированы, включая дисплеи HiDPI. В любом случае, это было недавно решено. Смотрите вопросJEP 263: графика HiDPI в Windows и Linux иОбновить.

Таким образом, увеличение размера шрифта не работает (потому что это не увеличивает все остальное); аргумент JVM-Dsun.java2d.dpiaware=false не работает (потому что это не было действительно поддержано); и файл манифеста + редактирование реестра (для Windows) просто не работает.

Решение: вам нужно запустить его на JRE 9, потому что он действительно поддерживает эту функцию.

Ваш ответ на вопрос