2014-11-12 36 views
13

Mam program Java Swing, który używa Look System i Feel:Java Swing na wysokim DPI ekranu

UIManager.setLookAndFeel (UIManager.getSystemLookAndFeelClassName()); 

Problem polega na tym, że na wysokim DPI systemie czcionek w ramkach są zbyt mały. Jak mogę uczynić tekst na moich ramkach czytelny, bez konieczności zmiany czcionek dla WSZYSTKICH ramek? Mój program został napisany w Javie 6 i ma za dużo ramek do modyfikacji.

+0

Możesz zmienić domyślne rozmiary czcionek wymienione w 'UIManager' – MadProgrammer

Odpowiedz

11

Można fizycznie modyfikować wygląd i ustawienia czcionek czuć za ...

HappyPig

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); 
       } 

      } 

     } 

    } 

} 

Używamy podobne podejście, aby zwiększyć/zmniejszyć rozmiar czcionki uruchomionej aplikacji do testowania układów (i ostatecznie pozwalają użytkownikowi jakąś dodatkową kontrolę nad rozmiaru czcionki)

+0

. Myślę, że wymaga to ręcznego ustawienia określonej wielkości czcionki, która nie jest dostosowywana w różnych systemach. I nie zmienia innych rozmiarów elementów graficznych (ikony ...). – guthrie

+0

@guthrie Trzeba by rozważyć współczynnik skalowania w oparciu o wymagania i ustawienia, ale w oparciu o wymaganie pytania, jest to początek. Rozumiem, że Java 9 wprowadziła "x" skalowanie obrazów, podobnie jak to, co iOS robi – MadProgrammer

+0

Tak - Java-9 rozwiązuje ten problem. – guthrie