2013-04-29 10 views
10

JTextAreaにすべてのプラットフォームで固定サイズの フォントを表示させる方法を知っている人はいませんか?JTextAreaでアンチエイリアス処理なしの固定幅フォントを表示する

保存/開く機能を持つ簡単なコードエディタ、 を簡単に作成したいですが、フォントを 固定サイズ、好ましくは宅配便にすることをお勧めします。

問題は宅配便新しいが明らかに独自であるということです、そしてない のみ、それは多くのシステムにデフォルトでインストールされていないが、ほとんどの 近代的なシステムでは、それは が、それはゴミのように見えるのClearTypeことがデフォルトに設定されています。

私はアップデートレンダリング-塗料で自分のJPanelを作成し、 JTextAreaの改革、及び固定サイズのビットマップとしてフォントを保存したくなるのですが、 このアプローチは愚か表示され、非常に時間がかかります。

私はプロジェクトにフリーの固定サイズのフォントを含めたいと考えており、 そのフォントをすべてのプラットフォームで使用しています。しかし、 現代のシステムはすべてのフォントを強制的に滑らかに見せてくれるので、私は がそれをやり遂げないようにしています。

悲しいことに、スウィングは自動的にシステムの設定である に従っているように見えるので、ユーザーの設定を破棄することなく、表示されません。

だから、要するに、JTextAreaには、固定幅フォント と無効フォントスムージング/アンチエイリアシング(または少なくともトグル)を表示するために取得する方法はありますか はスイングを使用してこのタスクは不可能でしょうか?

ありがとうございます!

答えて

23

論理フォント "モノスペース"を使用できます。すべての文字に対して同じサイズのフォントを持つことが保証されていますが、すべてのプラットフォームで同じではありません。

import java.awt.Font; 

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 

public class TestTextArea { 

    private void initUI() { 
     JFrame frame = new JFrame("test"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JTextArea textArea = new JTextArea(24, 80); 
     textArea.setFont(new Font("monospaced", Font.PLAIN, 12)); 
     frame.add(new JScrollPane(textArea)); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new TestTextArea().initUI(); 
      } 
     }); 

    } 

} 

また、あなたはあなたの必要性、コードでフォントとjava.awt.Font.createFont(int, InputStream)でそれを読み込む埋め込みを満たしている「自由」のフォントを調べることができます。

+0

ありがとう、それは質問に答えますが、私はモノスペースフォントではアンチエイリアスされないことを保証できるかどうかはまだ不思議です。これは可能ですか? – Dmitry

+0

@Dmitryアンチエイリアスを無効にする方法はいくつかあります。1)['System.setProperty(" awt.useSystemAAFontSettings "、" false ");'](http://docs.oracle.com/javase/6/docs /technotes/guides/2d/flags.html#aaFonts) 'System.property(" swing.aatext "、" false "); 2) 'paintComponent'メソッドの' Graphics'オブジェクトにRenderingHintsを設定して、TEXT_ANTI_ALIASING( ''(Graphics2D)g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING、Boolean)を無効にすることができます。FALSE);だが、その後誰かがそれを変更しないという絶対的な保証はない。 –

+0

私は後の変更について心配していません、私はデフォルト設定が心配です:)。どうもありがとう! – Dmitry

1

私はtext/htmlJTextPaneのコンテンツタイプを設定し、htmlコンテンツとしてテキストを設定することにより、JTextPane代わりのJTextAreaを使用して、解に近い来ました。タグは、テキストに等幅を作っているし、すべての空白とtextの改行文字はそれぞれ、HTML space entity<br>タグに置き換えられている。

JtextPane textPane; 
String text; 

// initialization 

textPane.setContentType("text/html"); 
textPane.setText("" 
     + "<html>" 
     + "<body>" 
     + "<p>" 
     + "<tt>"+text.replaceAll(" ", "&nbsp;").replaceAll("\n", "<br>")+"</tt>" 
     + "</p>" 
     + "</body>" 
     + "</html>"     
     + ""); 

<tt>私は、WindowsとUbuntu OSの両方で出力をテストしましたが、それらは同じでした。

関連する問題