Windows 中的 JTextArea 默认字体非常小

15

我正在使用平台的外观,而在Linux上我的JTextArea文本框非常易读。

但是在Windows上,它使用的是“Monospaced 9”的字体,文本非常小。

为什么会这样?有什么最好的解决方法?

为什么默认的Windows外观在JTextArea中使用了如此小的字体?


1
嗯,无法重现:在我的系统(Vista)上,字体是等宽的16号。通常,WindowLookAndFeel使用操作系统的字体设置 - 所以也许你的系统设置太小了?你的Windows版本是什么? - kleopatra
6个回答

29

不要创建新的字体,最好是派生现有的字体,因为这样可以保存由平台外观设置的字体,并且它还可以避免Unicode字符的问题:

textArea.setFont(textArea.getFont().deriveFont(12f)); // will only change size to 12pt

8

这里有一个解决方案,可以同时更改所有的JTextArea而不是每次添加新的文本区域时使用setFont():

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

在应用程序启动后,设置外观后调用此方法。

大多数外观都使用相同的字体来呈现JTextArea和JTextField,但Windows却不同。


2
如果你想要一个一致的外观,那么请使用Nimbus或Metal外观而不是操作系统默认的外观。这样做还可以让你调整任何设置。而且我个人认为Nimbus外观比其他外观看起来更加流畅。

在Windows上,它看起来与操作系统窗口非常不同。我真的更喜欢“系统”外观和感觉。 - Oleg Vazhnev
然而,无论在哪个平台上,Nimbus和Metal看起来都很陌生,一些用户真的不喜欢它。我希望花哨外观的应用程序的时代已经过去了。 - Denis Tulskiy

1

您可以使用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();
        }
    }

}

我不想指定字体,只想指定字体大小 :) 应该使用默认字体。 - Oleg Vazhnev
jTextArea没有getStyle()方法。setFont方法不接受3个参数。 - Oleg Vazhnev

1
我刚刚在文本域中使用了文本字段字体...
textArea = new JTextArea();
textArea.setFont(UIManager.getFont("TextField.font"));

0

只需执行以下操作:

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

这将更改文本区域中所有文本的字体大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接