2010-01-11 8 views
10

Sous Windows 7, si vous modifiez la taille de la police via le Panneau de configuration-> Apparence et personnalisation -> Affichage "Rendre le texte et autres éléments plus ou moins grands", les tailles de menu, mais aussi la taille du contenu du texte des applications comme Notepad, Wordpad, Firefox.Ajustement automatique de Java à l'ajustement de la taille de police de Windows 7

Existe-t-il un moyen d'amener Java à mettre à l'échelle automatiquement la police sans avoir à la mettre à l'échelle manuellement?

Répondre

0

Cela dépend entièrement de la boîte à outils GUI que vous utilisez. Je suis presque certain que SWT par exemple prendrait automatiquement les nouvelles tailles (puisqu'il utilise des widgets natifs). AWT pourrait aussi bien pour tout ce que je sais. Pouvez-vous spécifier quel toolkit vous utilisez et si vous avez déterminé qu'il ne fait pas déjà ce que vous voulez (et peut-être comment)?

6

Il y a deux parties à ceci:

  1. Obtenir vos composants, polices, etc. à l'échelle
  2. Obtenir vos mises en page à échelle

Pour Swing, la première partie est facile - Tout commence avec un appel. Sous Windows, cela signifie qu'il respecte le réglage des polices de caractères petites/grandes (PPP).

Voici deux captures d'écran d'une application de test rapide j'ai jeté ensemble, ce qui démontre à quoi il ressemble sur ma machine dans Windows 7 @ 96 dpi (taille de police normale) et @ 144dpi (150%)

D'abord la taille de la police par défaut échantillon:

Swing app with Windows using normal font sizes

maintenant, avec la taille de police plus grande (150%) ensemble:

Swing app with Windows using Larger font sizes

Il n'y a pas de changement de code entre les exécutions, uniquement la déconnexion & avec de nouveaux paramètres DPI. J'ai volontairement défini une taille d'image fixe pour démontrer que mon conteneur ne se redimensionne pas, ce qui a provoqué l'enfoncement de mon étiquette afin de l'ajuster.

Voici mon code source - couper & coller et exécuter vous-même:

import java.awt.FlowLayout; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 

public class SwingFontTest 
{ 
    private static void createGUI() 
    { 
     JButton button = new JButton("my button with Some Text"); 
     JLabel label = new JLabel("and a label"); 

     JPanel panel = new JPanel(new FlowLayout()); 
     panel.add(button); 
     panel.add(label); 

     JFrame frame = new JFrame("Title!"); 
     frame.setContentPane(panel); 
     frame.setSize(300,125); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     try 
     { 
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() 
      { 
       createGUI(); 
      } 
     }); 
    } 

} 

The Look & Feel fournit la taille par défaut, mais il appartient à l'auteur de l'interface graphique pour utiliser des unités évolutives dans leurs mises en page. Cela prend de l'effort (les mises à l'échelle évolutives sont pénibles sur les pages Web aussi!), Mais c'est certainement réalisable.

Je recommande d'utiliser une mise en page comme FormLayout qui vous permettra de définir vos mises en page dans les unités de dialogue (DLU), car celles-ci sont mises à l'échelle avec DPI. Cela vous permettra de réduire la taille de vos contenants et aidera à limiter les comportements, comme le passage de l'étiquette à la ligne suivante en raison du calibrage. Si la taille de la trame a été déterminée en utilisant des unités de dialogue, alors il pourrait être fait pour avoir la même apparence, seulement plus grande.

Il est tard - c'est tout pour l'instant.

Questions connexes