我正在我们的旧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摆动框架。我们是默认字体。
    改变所有这些都是很多工作。

所以现在我的问题是,有没有命令行选项可用于显示选项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);

    }
}

最佳答案

FontMetrics API(它用charWidth()定义了进阶)中,“请注意,String的进阶不一定是其字符的进阶之和。”此外,名为"Courier"的字体可以是等宽字体,但可能与Font.MONOSPACED指定的字体不同。

而是使用TextLayout导出所需的几何图形,如hereherehere所示。

关于java - 等宽和UTF8,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16352759/

10-09 06:21