有人知道如何让JTextArea显示固定大小吗
所有平台上的字体?

我想制作一个具有保存/打开功能的简单代码编辑器,
这很简单,但我想获得字体
固定尺寸,最好是 express 。

问题在于,新 express 显然是专有的,而不是
只是默认情况下它没有在许多系统上安装,但是在大多数系统上
在现代系统中,将cleartype设置为默认值,这使得
它看起来像垃圾。

我很想用update-render-paint和
重新发明JTextArea,并将字体保存为固定大小的位图,但是
这种方法看起来很愚蠢,非常耗时。

我想在项目中包含免费的固定大小字体,并且
在所有平台上都使用该字体,这似乎是可能的。然而,
现代系统似乎强制平滑所有字体,我会
喜欢阻止它做。

可悲的是,Swing似乎自动遵守系统偏好设置
因此在不破坏用户设置的情况下,这似乎是行不通的。

简而言之,有没有办法让JTextArea显示固定宽度
字体并禁用字体平滑/抗锯齿(或至少切换),或
使用 Swing 不可能完成此任务吗?

提前谢谢!

最佳答案

您可以使用逻辑字体“等宽”。尽管它保证所有字符的字体大小都相同,但在所有平台上都不会相同。

import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class TestTextArea {

    private void initUI() {
        JFrame frame = new JFrame("test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JTextArea textArea = new JTextArea(24, 80);
        textArea.setFont(new Font("monospaced", Font.PLAIN, 12));
        frame.add(new JScrollPane(textArea));
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TestTextArea().initUI();
            }
        });

    }

}

或者,您可以查找满足您需要的“免费”字体,将其与代码一起嵌入并使用java.awt.Font.createFont(int, InputStream)加载它。

09-30 14:10
查看更多