1

古い Java Swing アプリケーションの 1 つのフォント表示を修正しています。実行時に「 -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);

    }
}
4

1 に答える 1

1

の観点から前進FontMetricsを定義する APIから、「a の前進は必ずしもその文字の前進の合計ではないことに注意してください。」さらに、 という名前のフォントは等幅フォントである場合がありますが、 で指定されたフォントと同じではない場合があります。charWidth()String"Courier"Font.MONOSPACED

代わりに、ここここ、およびここTextLayoutに示すように、 を使用して必要なジオメトリを派生させます。

于 2013-05-03T09:26:31.070 に答える