JTextArea шрифт по умолчанию очень маленький в Windows - PullRequest
11 голосов
/ 24 июня 2011

Я использую платформу Look-and-Fall, и в Linux мой JTextArea довольно читабелен. Но в Windows он использует "Monospaced 9" и текст очень маленький.

Почему и как лучшечтобы это исправить?

Почему Windows Look-and-Fall по умолчанию использует такой маленький шрифт в JTextArea?

Ответы [ 6 ]

24 голосов
/ 08 августа 2011

Вместо создания нового шрифта лучше извлечь существующий шрифт, потому что таким образом вы сохраните шрифт, заданный в соответствии с внешним видом платформы, и это также может избежать проблем с символами Юникода:

textArea.setFont(textArea.getFont().deriveFont(12f)); // will only change size to 12pt
8 голосов
/ 23 августа 2012

Вот решение, которое вы можете использовать для одновременного изменения всех JTextAreas вместо использования setFont () каждый раз, когда вы добавляете новую текстовую область:

UIManager.getDefaults().put("TextArea.font", UIManager.getFont("TextField.font"));

Вызывайте это при запуске вашего приложения, после установкиLook and Feel.

Большинство L & F используют один и тот же шрифт для JTextArea и JTextField, странно, что Windows этого не делает.

2 голосов
/ 24 июня 2011

Если вы хотите получить единообразный внешний вид, используйте внешний вид Nimbus или Metal вместо операционной системы по умолчанию. Это также позволит вам настроить любые параметры. Кроме того, я лично считаю, что Nimbus Look and Feel выглядит намного лучше, чем другие.

1 голос
/ 24 июня 2011

Вы можете использовать метод JTextArea1.setFont(Font(String name, int style, int size)), чтобы указать конкретный тип шрифта для компонента JTextArea. В качестве примера

jTextArea1.setFont(new Font("Arial Black", Font.BOLD, 8));


import java.awt.BorderLayout;
import java.awt.Font;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;

public class NewJFrame extends javax.swing.JFrame {

    private JTextArea jTextArea1;
    private JTextArea jTextArea2;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                NewJFrame inst = new NewJFrame();
                inst.setLocationRelativeTo(null);
                inst.setVisible(true);
            }
        });
    }

    public NewJFrame() {
        super();
        initGUI();
    }

    private void initGUI() {
        try {
            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            {
                jTextArea1 = new JTextArea();
                getContentPane().add(jTextArea1, BorderLayout.NORTH);
                jTextArea1.setText("This is a fox running slow");
                jTextArea1.setFont(new Font("Arial Black", Font.BOLD, 8));
                jTextArea1.setPreferredSize(new java.awt.Dimension(164, 114));
            }
            {
                jTextArea2 = new JTextArea();
                getContentPane().add(jTextArea2, BorderLayout.SOUTH);
                jTextArea2.setText("This is a fox running slow");
                jTextArea2.setFont(new Font("Book Antiqua", Font.ITALIC, 12));
                jTextArea2.setPreferredSize(new java.awt.Dimension(384, 129));
            }
            pack();
            setSize(400, 300);
        } catch (Exception e) {
            //add your error handling code here
            e.printStackTrace();
        }
    }

}
0 голосов
/ 08 августа 2011

Просто сделай

textArea.setFont(new Font("Arial", Font.PLAIN, 16));

Это изменяет весь текст внутри текстовой области на один и тот же размер шрифта.

0 голосов
/ 24 июня 2011

Я только что использовал шрифт TextField в TextArea ...

textArea = new JTextArea();
textArea.setFont(UIManager.getFont("TextField.font"));
...