Il y a deux parties à ceci:
- Obtenir vos composants, polices, etc. à l'échelle
- 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:
maintenant, avec la taille de police plus grande (150%) ensemble:
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.