Есть две части к этому:
- Как ваши компоненты, шрифты и т.д. масштабировать
- Получение макетов в масштабе
Для Качели, первая часть легко - все начинается с одного вызова.
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
В Windows это будет заставлять его соблюдать настройку Small/Large fonts (DPI).
Вот две скриншотов из быстрого теста приложения, которое я выбросил вместе, показывая, как это выглядит на моей машине в Windows 7 @ 96dpi (нормального размере шрифта) и @ 144dpi (150%)
Первого размера шрифта по умолчанию образец:
Теперь с большей (150%) размер шрифта:
Нет изменений кода между прогонами, только выход из системы & с новыми настройками DPI. Я установил фиксированный размер кадра, чтобы продемонстрировать, что мой контейнер не масштабируется по размеру, что привело к тому, что моя метка была нажата вниз, чтобы соответствовать.
Вот мой исходный код - вырезать & пасты и запустить его самостоятельно:
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 поставляет проклейки по умолчанию, но это до автора GUI для использования масштабируемых единиц в их макетов. Это требует больших усилий (масштабируемые макеты - это боль на веб-страницах тоже!), Но это определенно достижимо.
Я рекомендую использовать макет, например FormLayout, который позволит вам определить ваши макеты в диалоговых модулях (DLU), как эти шкалы с DPI. Это позволит вам сделать размер ваших контейнеров в размере и помочь ограничить поведение, например, перемещение метки на следующую строку из-за размера. Если размер рамки был определен с помощью диалоговых блоков, тогда можно было бы выглядеть одинаково, только больше.
Уже поздно - так оно и есть.