2010-01-11 13 views
10

In Windows 7, se si modifica la dimensione del carattere tramite Pannello di controllo-> Aspetto e personalizzazione -> Visualizza "Rendi il testo e altri elementi più grandi o più piccoli", regola non solo le dimensioni del menu, ma anche le dimensioni del contenuto del testo di app come Blocco note, Wordpad, Firefox.Java adeguamento automatico alla modifica della dimensione del carattere di Windows 7

C'è un modo per far sì che Java riduca automaticamente il carattere senza doverlo ridimensionare manualmente?

risposta

0

Ciò dipenderebbe interamente dal toolkit della GUI che si sta utilizzando. Sono quasi certo che SWT, ad esempio, raccoglierà automaticamente le nuove dimensioni (dato che usa i widget nativi). AWT potrebbe anche per quello che so. Puoi specificare quale toolkit stai usando e se hai determinato che non sta già facendo quello che vuoi (e possibilmente come)?

6

Ci sono due parti a questo:

  1. Ottenere i componenti, font, ecc in scala
  2. Ottenere i vostri layout per scala

per Swing, la prima parte è facile - tutto inizia con una chiamata.

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 

In Windows, questo farà sì che rispetti le impostazioni di caratteri piccoli/grandi (DPI).

Qui ci sono due screenshot di un'applicazione di test rapido ho buttato insieme, dimostrando come appare sulla mia macchina in Windows 7 @ 96 dpi (dimensioni normali del carattere) e @ 144dpi (150%)

Prima la dimensione del font di default campione:

Swing app with Windows using normal font sizes

Ora con i più grandi (150%) insieme la dimensione del carattere:

Swing app with Windows using Larger font sizes

Non c'è alcun cambio di codice tra le esecuzioni, solo il logout & viene ripristinato con le nuove impostazioni DPI. Ho impostato appositamente una dimensione fissa del frame per dimostrare che il mio contenitore non ha dimensioni ridimensionabili, il che ha causato il push dell'etichetta verso il basso per adattarsi.

Ecco il mio codice sorgente - taglio & pasta da gestire:

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 & tatto fornisce il dimensionamento di default, ma spetta all'autore GUI per utilizzare le unità scalabili nel loro layout. Ci vuole impegno (anche i layout scalabili sono un problema con le pagine web!), Ma è sicuramente raggiungibile.

Si consiglia di utilizzare un layout come FormLayout che consente di definire i layout in Unità di dialogo (DLU), poiché questi si ridimensionano con DPI. Ciò ti consentirà di ridimensionare le dimensioni dei tuoi contenitori e dovrebbe contribuire a limitare comportamenti come l'etichetta che passa alla riga successiva a causa del dimensionamento. Se la dimensione della cornice è stata determinata utilizzando le unità di dialogo, potrebbe essere fatta apparire uguale, solo più grande.

È tardi, quindi è tutto per ora.

Problemi correlati