Hay dos partes a esto:
- Obtención de los componentes, fuentes, etc. a Escala
- Conseguir que sus diseños para escala
para Swing, la primera parte es fácil - Todo comienza con una llamada.
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
En Windows, esto hará que respete la configuración de fuentes pequeñas/grandes (DPI).
Éstos son dos capturas de pantalla de una aplicación de prueba rápida Tiré juntos, lo que demuestra cómo se ve en mi máquina de Windows 7 @ 96 ppp (tamaño de letra normal) y @ 144dpi (150%)
primer lugar, el tamaño de fuente predeterminado muestra:
![Swing app with Windows using normal font sizes](https://i926.photobucket.com/albums/ad105/onelin/swing_font_test_96dpi.png)
Ahora con más grande (150%) conjunto tamaño de la fuente:
![Swing app with Windows using Larger font sizes](https://i926.photobucket.com/albums/ad105/onelin/swing_font_test_144dpi.png)
No hay cambio de código entre ejecuciones, solo se cierra la sesión & con la nueva configuración de DPI. Establecí un tamaño de fotograma fijo a propósito para demostrar que mi contenedor no está escalando en tamaño, lo que hizo que mi etiqueta fuera empujada hacia abajo para que cupiera.
Aquí está mi código fuente - cortar & pegar y ejecutar por sí mismo:
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();
}
});
}
}
La Mirada & Feel suministra el tamaño por defecto, pero es decisión del autor interfaz gráfica de usuario para utilizar unidades escalables en sus diseños. ¡Requiere esfuerzo (los diseños escalables son un problema en las páginas web también!), Pero definitivamente es alcanzable.
Recomiendo utilizar un diseño como FormLayout que le permita definir sus diseños en unidades de diálogo (DLU), ya que estas se escalan con DPI. Eso le permitirá hacer que sus contenedores se escalen en tamaño y debería ayudar a limitar comportamientos como el cambio de etiqueta a la siguiente línea debido al tamaño. Si el tamaño del marco se determinó usando unidades de diálogo, se podría hacer que se vea igual, solo que más grande.
Es tarde, así que eso es todo por ahora.