Какой шрифт в Swing выглядит одинаково во всех ОС? - PullRequest
8 голосов
/ 25 августа 2011

Я использую Netbeans 7.0 с JDK6 под Windows 7 для разработки пользовательского интерфейса моего Java-приложения.Я применяю Системный внешний вид.Но он выглядит так, как я хочу в Windows, но отличается в MacOS и даже хуже, он выглядит по-разному в разных оконных менеджерах в Linux (LXDE, GNOME, KDE, XFCE).

Под разными я имею в виду шрифты иих размер.В Windows, если метка выглядит как «v 1.23», в других ОС она выглядит как «v ...», потому что в этой ОС шрифты становятся больше, а JLabel не хватает места для отображения.Это происходит в нескольких местах.

Я не хочу увеличивать ширину этикетки.Я хочу, чтобы метка выглядела одинаково при данной ширине во всех ОС.По умолчанию Netbeans использует шрифт Tahoma 11pt на моем компьютере.Я думаю, что это доступно не во всех ОС, поэтому другие ОС используют другой шрифт.

Является ли Arial распространенным шрифтом?

Следует ли мне вручную менять шрифт каждого элемента на Arial?Или любые другие варианты?

Ответы [ 4 ]

8 голосов
/ 25 августа 2011

Вместо этого используйте менеджер макетов и семейство логических шрифтов . Этот пример с Font ниже добавляет 24-точечный текст с засечками курсивом к центру (по умолчанию) BorderLayout для достижения приятного результата на разнородных платформах.

ta.setFont(new Font("Serif", Font.ITALIC, 24));

Mac OS X:

Mac

Windows 7:

Windows

Ubuntu Linux:

Linux

5 голосов
/ 25 августа 2011

Когда дело доходит до оконных менеджеров, это гораздо больше, чем просто размер шрифта, например, ширина между двумя элементами управления обрабатывается по-разному в gnome & KDE. когда дело доходит до использования одинакового размера шрифта на всех платформах, вы можете использовать шрифт Sans Serif, это доступно во всех ОС, с которыми я работал.

также было бы лучше (если вы не можете найти засечку в ОС, в которой вы хотите запустить свое приложение), вы можете загрузить шрифт (бесплатный из GNU Free Fonts ).

когда дело доходит до установки размеров шрифта и шрифтов, почему бы вам не попробовать использовать тему и установить там шрифт ... Вы можете использовать метод UIManager.setLookAndFeel() для изменения тем. вот ссылка на Look & Feel

0 голосов
/ 12 февраля 2016

Старый вопрос, но я нашел его, потому что искал решение.И мое решение: используйте шрифты DejaVu.Шрифт диалога Java выглядит по-разному в Linux и Windows, но DejaVuSans 12 очень похож на шрифт диалога в Linux и выглядит так же в Windows (по крайней мере, в Windows 8.1).Мой код:

...
static Font dejaVuSans;
static final String resPath = "<classpath>/resources/"; // no leading "/"
...
public static void main(String[] args) {
    /* See:
     * /5597177/ustanovka-shrifta-po-umolchaniy-dlya-programmy-swing
     * https://stackoverflow.com/questions/8361947/how-to-get-getclass-getresource-from-a-static-context
     */
    dejaVuSans = null;
    Font f;
    try {
        InputStream istream = <ClassName>.class.getClassLoader().getResourceAsStream(
            resPath + "DejaVuSans.ttf");
        dejaVuSans = Font.createFont(Font.TRUETYPE_FONT, istream);
        f = dejaVuSans.deriveFont(Font.PLAIN, 12);
    } catch (Exception e) {
        System.err.println(e.getMessage());
        f = null;
    }
    if (f == null)
        f = new Font("Dialog", Font.PLAIN, 12);
    java.util.Enumeration keys = UIManager.getDefaults().keys();
    while (keys.hasMoreElements()) {
        Object key = keys.nextElement();
        Object value = UIManager.get (key);
        if (value != null && value instanceof javax.swing.plaf.FontUIResource)
            UIManager.put (key, f);
    }
    ...
}

Конечно, если DejaVuSans.ttf не встроен в файл JAR, вы можете импортировать его во время выполнения.См. Как импортировать шрифт? .

0 голосов
/ 25 августа 2011

Lucida Sans Regular всегда поставляется с Java, но я не думаю, что это решит проблему, связанную с тем, что некоторые тексты / метки выходят из формата.Это также зависит от разрешения экрана пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...