Установить шрифт по умолчанию для приложения Swing один раз, даже если нарисован новый текст - PullRequest
0 голосов
/ 05 июля 2018

Я использовал Ромен Гиппо . Чтобы установить шрифт по умолчанию для приложения при его первом построении.

public static void setUIFont(javax.swing.plaf.FontUIResource f) {
    java.util.Enumeration keys = UIManager.getDefaults().keys();
    while (keys.hasMoreElements()) {
        Object key = keys.nextElement();
        Object value = UIManager.get(key);
        if (value instanceof javax.swing.plaf.FontUIResource)
            UIManager.put(key, f);
    }

А потом называет это:

        setUIFont(new javax.swing.plaf.FontUIResource("Sans", Font.PLAIN, 24));

Однако, когда новый текст записывается в приложение Swing: I.e

JTextArea textArea = new JTextArea();
onSomeEventHappening(){
    textArea.setText("Hello world");
}

Hello world появляется в стандартном шрифте Swing, тогда как все остальные мои элементы остаются в шрифте, в котором я хочу, чтобы все оставалось. Есть ли способ убедиться, что весь новый текст, добавленный в приложение, не изменил свой шрифт .

enter image description here

Выше приведен пример этого, слово "FOOTBALL" было записано в его поле со списком и поэтому появляется с обычным шрифтом Swing, тогда как моя кнопка "Generate one link" появляется в шрифте, который я установил.

Ниже приведен пример копирования и вставки. Если вы нажмете кнопку, несмотря на установку шрифта выше, метка все еще будет в оригинальном стиле Swings:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class test extends JFrame {
    private static final int WIDTH = 1000;
    private static final int HEIGHT = 700;
    private JTextArea textArea = new JTextArea();


public static void setUIFont(javax.swing.plaf.FontUIResource f) {
    java.util.Enumeration keys = UIManager.getDefaults().keys();
    while (keys.hasMoreElements()) {
        Object key = keys.nextElement();
        Object value = UIManager.get(key);
        if (value instanceof javax.swing.plaf.FontUIResource)
            UIManager.put(key, f);
    }
}
public test(){
    initialize();
}

final ActionListener buttonClick = new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        textArea.setText("new Text");
    }
};

public void initialize(){
    new JFrame();
    setBounds(100, 100, 450, 300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new GridLayout(1,2));
    setUIFont(new javax.swing.plaf.FontUIResource("Sans", Font.PLAIN, 24));
    JButton button = new JButton("test");

    button.addActionListener(buttonClick);
    this.add(button);
    this.add(textArea);
    setVisible(true);
}

public static void main(String[] args){
    test test1 = new test();
}
}

1 Ответ

0 голосов
/ 05 июля 2018
private JTextArea textArea = new JTextArea();
 ...
 setUIFont(new javax.swing.plaf.FontUIResource("Sans", Font.PLAIN, 24));
 ...
 JButton button = new JButton("test");

Вы уже создали JTextArea, прежде чем изменить шрифт.

Компонент Swing получает свои свойства пользовательского интерфейса во время его создания.

Так что вам нужно создать JTextArea ПОСЛЕ того, как вы установите шрифт, так же, как вы делаете это с JButton.

Примечание: если вы изменяете свойства после того, как компоненты были созданы, вам нужно сбросить свойства.

SwingUtilities.updateComponentTreeUI(frame);
frame.pack();

Прочтите раздел из учебника по Swing на Как настроить внешний вид после запуска для получения дополнительной информации.

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