2010-01-11 11 views
10

En Windows 7, si cambia el tamaño de letra mediante el Panel de control-> Apariencia y personalización-> Mostrar "Hacer texto y otros elementos más grandes o más pequeños", ajusta no solo los tamaños del menú, pero también el tamaño del contenido de texto de aplicaciones como el Bloc de notas, Wordpad, Firefox.Java se ajusta automáticamente al ajuste de tamaño de fuente de Windows 7

¿Hay alguna manera de hacer que Java escale automáticamente la fuente sin tener que escalarla manualmente?

Respuesta

0

Esto dependería completamente del kit de herramientas GUI que esté utilizando. Estoy casi seguro de que SWT, por ejemplo, recogería automáticamente los nuevos tamaños (ya que utiliza widgets nativos). AWT también podría ser todo lo que sé. ¿Puede especificar qué kit de herramientas está utilizando y si ha determinado que todavía no está haciendo lo que quiere (y posiblemente cómo)?

6

Hay dos partes a esto:

  1. Obtención de los componentes, fuentes, etc. a Escala
  2. 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

Ahora con más grande (150%) conjunto tamaño de la fuente:

Swing app with Windows using Larger font sizes

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.

Cuestiones relacionadas