2012-06-13 9 views
10

JTextPaneを使用してコンソールのような出力を作成したいとします。JTextPaneの固定幅フォント/記号

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

これは(AZ、0-9などのような)文字alphanumのすべての種類のために正常に動作しますが、それは次のようにシンボルに来る「 \ u2588」(█:したがって、私は、等幅フォントを使用しています)、フォントはモノスペースではありません。

私は何かを忘れましたか?またはsmybolsを含むモノスペースのフォントはありませんか?

答えて

10

ここでは、いくつかの異なることに取り組んでいるように私には聞こえるので、私はそれらを別々に扱うつもりです。

1.すべてのユニコード文字、記号などに固定幅のフォントが必要です。

thisページによれば、Unicode 3.2標準で定義された12886の英数字と "記号"文字がありました。 Unicodeは現在6.0になっているので、今では数字が大きいと思われます。また、Unicodeは多くの言語にまたがる100,000以上の文字をサポートしているため、「英数字」は英語の文字を意味すると仮定しています。とにかく、英語で認識されている12886文字と記号はまだたくさんあるので、すべてのフォントをサポートするフリーフォントがたくさんあるとは思っていません。

つまり、文字サポートを備えたモノスペースフォントが必要なほとんどのJavaアプリケーションでは、Courier Newが使用されています。上記の '\ u2588'文字だけでなく、 "degrees"シンボルのような他の重要な文字もサポートしています。このモノ間隔のフォントは、「クロスプラットフォーム」であることが必要

2.

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

決勝思考

私はそれを言うことを憎むが、私はUnicode標準で定義されたすべての英数字/記号文字をサポートしてそこに多くのフォントがあることを疑う、全てがモノ間隔、クロスの少なくとも - プラットフォーム、無料。可能であれば、必要なシンボルを特定し、そのシンボルをサポートするフォントを選択し、アプリケーションを実行するプラットフォームでサポートされているフォントを選択すると、時間がかかることがあります。すべてのUnicodeシンボルを絶対にサポートする必要がある場合は、残念ながら、おそらく無料にならないでしょう。

+0

英数字で私はa-Z、0-9などを意味しました。Courier Newはうまく働いてくれました。 – user28061

+0

私は良いフリークロスプラットフォームフォントのソースコードプロをお勧めします。インストーラーにバンドルするか、ユーザーが手動でインストールする必要があります。 https://github.com/adobe-fonts/source-code-pro/releases – Appak

3

モノスペースフォントはOS Xでは動作しますが、Windowsでは動作しません。変わったことは、monospacedはfontconfig.propertiesを使ってWindows上でCourier Newを使うように設定されているということです。

私は実際にこれを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を追加しようとしましたが、それはOS Xでもモノスペースに見えます。

関連する問題