Java >> Java tutorial >  >> Tag >> Swing

Java Swing på høj-DPI-skærm

Du kan fysisk ændre udseendets skrifttypeindstillinger...

import java.awt.EventQueue;
import java.awt.Font;
import java.util.Set;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                setDefaultSize(24);

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new JLabel("Happy as a pig in a blanket"));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public static void setDefaultSize(int size) {

        Set<Object> keySet = UIManager.getLookAndFeelDefaults().keySet();
        Object[] keys = keySet.toArray(new Object[keySet.size()]);

        for (Object key : keys) {

            if (key != null && key.toString().toLowerCase().contains("font")) {

                System.out.println(key);
                Font font = UIManager.getDefaults().getFont(key);
                if (font != null) {
                    font = font.deriveFont((float)size);
                    UIManager.put(key, font);
                }

            }

        }

    }

}

Vi bruger en lignende tilgang til at øge/mindske skriftstørrelsen af ​​den kørende applikation for at teste layouts (og til sidst give brugeren mulighed for en vis yderligere kontrol over skriftstørrelsen)


Jeg kan ikke med sikkerhed sige, om dette løser problemet fuldt ud, men tilsyneladende er Java med høj DPI rettet til Mac i Java 7 og rettet til Linux og Windows i Java 9.

JEP 263:HiDPI-grafik på Windows og Linux:http://openjdk.java.net/jeps/263

tilsvarende billet:https://bugs.openjdk.java.net/browse/JDK-8055212


Java tag