How can I scale fonts on a high resolution screen?

Andiamo picture Andiamo · Feb 23, 2015 · Viewed 8.1k times · Source

On a high-resolution screen (my example, Windows 8.1) is my Java application. The menu in particular is very small, and it's almost impossible to select a menu item.

In the normal screens (72 DPI) everything is OK.

Font with a fixed size (in my case it would have <80px), is a poor choice. 72 DPI screens show it very large.

How can I make the fonts scalable so that the program conforms to its size, or the user gets the possibility of setting?

Answer

tucuxi picture tucuxi · Feb 23, 2015

You can change the default font size in a single place by accessing your PLAF: Java Swing on high-DPI screen

but this will still make the application look bad, because inter-component spaces will be in pixels, and therefore will not scale with font size. See http://www.javalobby.org/java/forums/t101878.html for a longer discussion.

My recommendation is to use a DPI-aware layout library, such as MigLayout, which supports specifying sizes either in pixels or in DPI-aware mm or cm. You can then couple both font-scaling and DPI-aware spacing by using FontMetrics to find the correct size for your fonts.