Java, автоматически корректирующийся к корректировке размера шрифта Windows 7

В Windows 7 при изменении размера шрифта через Панель управления-> Появление и Персонализация->, Дисплей "Делает текст и другие объекты больше или меньшими", это корректирует не только размеры меню, но также и текстовый размер содержания приложений как Блокнот, Wordpad, Firefox.

Существует ли способ заставить Java автоматически масштабировать шрифт, не имея необходимость вручную масштабировать его?

10
задан Joshua McKinnon 16 January 2010 в 05:58
поделиться

2 ответа

Это будет полностью зависеть от того, какой GUI-инструментарий вы используете. Я почти уверен, что SWT, например, автоматически подберет новые размеры (так как он использует нативные виджеты). AWT мог бы с таким же успехом, насколько я знаю. Можете ли вы указать, какой инструментарий вы используете, и определили ли вы, что он уже не делает то, что вы хотите (и, возможно, как)?

.
0
ответ дан 4 December 2019 в 03:16
поделиться

Для этого есть две части:

  1. Получение ваших компонентов, шрифтов и т. Д. масштабировать
  2. Получение ваших макетов к Шкала

Для качания первая часть проста - все это начинается с одного звонка.

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

На Windows это заставит его уважать настройку ваших небольших / больших шрифтов (DPI).

Вот два скриншота из быстрого тестирования, которое я бросил вместе, демонстрируя, как он выглядит на моей машине в Windows 7 @ 96dpi (нормальный размер шрифта) и @ 144DPI (150%)

сначала образец размер шрифта по умолчанию:

Swing app with Windows using normal font sizes

Теперь с большим (150%) набором размера шрифта:

Swing app with Windows using Larger font sizes

Нет изменения кода между запусками, вытесняя только выключение и обратно в новые настройки 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();
            }
        });
    }

}

Source & Team поставляет размеры по умолчанию, но он зависит от автора GUI для использования масштабируемых единиц в их макетах. Он принимает усилия (масштабируемые макеты тоже боли на веб-страницах!), Но это определенно достижимо.

Я рекомендую использовать планировку, такую ​​как Formlayout , который позволит вам определить свои макеты в диалоговых блоках (DLU), как эти масштабы с DPI. Это позволит вам сделать размер масштабирования ваших контейнеров и помочь ограничить поведение, как этикетка, перемещаясь на следующую строку из-за размера. Если размер кадра был определен с использованием диалоговых угловых единиц, то можно было бы сделать то же самое, только больше.

Это поздно - так что это сейчас.

6
ответ дан 4 December 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: