1

我正在我们的一个旧 java Swing 应用程序中更正字体显示。在运行时使用“ -Dfile.encoding=UTF-8 ”选项后发生了变化。

FontClass.jar 是我的示例 jar 文件。

option 1:
javaw -Xmx256M -jar -Dfile.encoding=UTF-8 "FontClass.jar"

option 2:
javaw -Xmx256M -jar "FontClass.jar"

使用选项 1: 我得到等宽显示

使用选项 2: 我得到非等宽显示。

局限性:

i) -Dfile.encoding=UTF-8 我们添加了这个选项,让我们的所有流都支持 UTF-8 支持。而不是手动修改每个流。

ii)我们在很多地方都在使用 java swing frame work。我们使用默认字体。改变这一切需要大量的工作。

所以现在我的问题是有任何命令行选项,我可以使用选项 1 获得等宽显示:

下面是示例代码:

class Show extends Frame {
    FontMetrics fontM;
    String outString;

    Show(String target, String title, Font font) {

        setTitle(title);
        outString = target;

        fontM = getFontMetrics(font);
        setFont(font);

        int size = 0;
        for (int i = 0; i < outString.length(); i++) {
            size += fontM.charWidth(outString.charAt(i));
        }
        size += 24;

        setSize(size, fontM.getHeight() + 60);
        setLocation(getSize().width / 2, getSize().height / 2);
        setVisible(true);
    }

    public void paint(Graphics g) {
        Insets insets = getInsets();
        int x = insets.left;
        int y = insets.top;
        g.drawString(outString, x + 6, y + fontM.getAscent() + 14);
    }
}

public class Fontclass {

    public static void main(String[] args) { 



        String jaString = new String("\u65e5\u672c\u8a9e\u6587\u5b57\u5217");  

        String inputString = "\niiii\naaaaiiii";

        String displayString = jaString + " " + inputString;

        Font font;
        font = new Font("Courier",3, 24);

        new Show(displayString, "Demo",font);

    }
}
4

1 回答 1

1

FontMetrics定义Advance的 API中charWidth(),“请注意,a 的StringAdvance 不一定是其字符的Advance 的总和。” 此外,一个名为的字体"Courier"可能是等宽字体,但它可能指定的字体不同Font.MONOSPACED

相反,使用TextLayout导出所需的几何图形,如此此处此处所示。

于 2013-05-03T09:26:31.070 回答