13

JTextPaneを使用してコンソールのような出力を作成したいと思います。したがって、私は等幅フォントを使用しています。

textpane.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));

これは、すべての種類の英数字(az、0-9など)の文字に対しては正常に機能しますが、' \ u2588 '(█)のような記号に関しては、フォントは等幅ではなくなりました。

何か忘れましたか?または、smybolsを含む等幅フォントはありませんか?

4

2 に答える 2

15

さて、最初に、あなたがここでいくつかの異なることに対処しようとしているように思えるので、両方を別々に対処しようとします。

1.すべてのUnicode文字、記号、またはその他に対して等幅のフォントが必要です。

このページによると、Unicode3.2標準で定義されている12886文字の英数字と「記号」文字がありました。Unicodeは現在6.0になっているので、おそらくその数はもっと大きくなっていると推測できます。また、Unicodeは多くの言語にまたがる100000を超える文字をサポートしているため、ここでは「英数字」は英語の文字を意味すると想定しています。とにかく、12886の英語で認識される文字と記号はまだたくさんあり、それらすべてをサポートする多くのフリーフォントがあるとは思えません。

そうは言っても、Courier New文字をサポートする等幅フォントを必要とするほとんどのJavaアプリケーションに使用することになります。上記の「\u2588」文字だけでなく、「度」記号などの他の多くの重要な文字もサポートします。

2.この等幅フォントは「クロスプラットフォーム」である必要があります

Mac OS Xとすべての種類のWindowsがサポートしていることは確かですが、Courier New実行しているLinuxのバージョンもサポートしています(RedHat ...はバージョン番号を思い出せません)が、すべてのLinuxバージョンがこのフォントをネイティブに備えているわけではありません。とにかく...あなたはCourier Newそれがあなたのために働くかどうか試してみるかもしれません。そうでない場合は、フォント/文字のサポートをテストするための無料のツールをオンラインで見つけることができます。

最終的な考え

言いたくないのですが、Unicode標準で定義されているすべての英数字/記号文字をサポートするフォントがたくさんあるとは思えません。特に、等幅、クロスプラットフォーム、無料です。可能であれば、特定の記号が必要かどうかを調べてから、それらの記号をサポートし、アプリケーションを実行することがわかっているプラ​​ットフォームでサポートされているフォントを選択することをお勧めします。どうしてもすべてのUnicodeシンボルをサポートする必要がある場合は、残念ながら、無料になることはないでしょう。

于 2012-06-13T19:23:15.810 に答える
3

等幅フォントはOSXで機能しますが、Windowsでは機能しません。奇妙なことに、monospacedは、fontconfig.propertiesを介してWindowsでCourierNewを使用するように構成されています。

私は実際にこれをOracleのバグとして記録しました。OS Xで正しくレンダリングされるサンプルコードを次に示しますが、等幅フォントはWindowsで正方形のボックスを生成します。

import java.awt.BorderLayout;
import java.awt.Font;

import javax.swing.JEditorPane;
import javax.swing.JFrame;

public class Test {

    public static void main(String[] args) {
        JFrame f = new JFrame("editor test");
        f.getContentPane().setLayout(new BorderLayout());
        f.add(pane("monospaced"), BorderLayout.NORTH);
        f.add(pane("Courier New"), BorderLayout.SOUTH);
        f.pack();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }

  private static JEditorPane pane(final String name) {
    JEditorPane p = new JEditorPane();
    final Font currFont = p.getFont();
    p.setFont(new Font(name, currFont.getStyle(), currFont.getSize()));
    p.setText(name + " - 8\u1d00.\u1d0d.");
    return p;
  }
}

\ u2588を追加してみましたが、OSXの等幅フォントでも問題ありません。

于 2012-08-14T06:08:40.730 に答える