Ci sono due parti a questo:
- Ottenere i componenti, font, ecc in scala
- 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:
Ora con i più grandi (150%) insieme la dimensione del carattere:
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.