2012-02-17 22 views
8

私はJTextPaneを持っており、そのJTextPane内にいくつかのテキストがあります。ただし、ペイン内でHTMLを使用しているため、テキストは自動的にTimes New Romanに変更されたようです。Java - HTMLを含むJTextPaneのフォントを変更

JTextPane内のフォントタイプをGUIのデフォルトフォント(HTMLでない場合はJTextPaneのフォント)に設定しようとしています。しかし、オペレーティングシステムとは異なるため、フォントを1つのフォントに設定することはできません。したがって、デフォルトのフォントを取得して、それを既定のフォントに変更する方法を見つけたいと思います。

変換時にテキストがTimes New Romanにどのようにスワップされるかを示すために、次のコードは私が使用した形式です。私の目標を達成するために私はそれをどのように変更できますか?

import javax.swing.JFrame; 
import javax.swing.JTextPane; 


public class GUIExample { 

    public static void main(String[] args) { 

     JFrame frame = new JFrame("My App"); 
     frame.setSize(300,300); 
     JTextPane pane = new JTextPane(); 
     pane.setContentType("text/html"); 
     pane.setText("<html><b>This is some text!</b></html>"); 
     frame.add(pane); 

     frame.setVisible(true); 

    } 

} 

ありがとうございます!あなたのデフォルトのフォントを与える

string fontfamily = pane.getFont().getFamily(); 

答えて

7

最も簡単な方法は、おそらくこのようなものです。次に、CSSを使用して適用します。

pane.setText("<html><body style=\"font-family: " + fontfamily + "\"<b>This is some text!</b></html>"); 
+0

これはそれで私を助け、私はコンポーネントのデフォルトのフォントを返すために別のクラスに新たなメソッドを実装して、あなたに似たHTMLの中にそれを使用します自分の。ありがとうございました。 – mino

1

JComponent htmlレンダラーはJComponentのフォントではなく、独自のフォントを使用します。コンポーネントを同じようにレンダリングするには、html文字列にフォント属性を設定する必要があります。とりわけ、あなたは、あなたが次のことを行うことができます例として、フォントファミリ、サイズ、太字/斜体など

を設定する必要があります。

JTextPane pane = new JTextPane(); 
Font font = pane.getFont(); 
pane.setContentType("text/html"); 
pane.setText("<html><font face=\"" + font.getFamily() + "\" size=\"" + font.getSize() + "\"></font>This is some text!</html>"); 

作成するために、かなり些細なことだろうあなたのためにこれを行う関数。 JComponentと文字列を渡すと、すべてのフォントタグを含むhtmlテキストが作成されます。

+0

私はあなたの方法を試しましたが、それは私のために働くようには見えませんでした。 – mino

+1

は、他の多くのタグ内で技術的に再指定が必要なペディティックタグの1つです。外部にラップすることはできません。したがって、このソリューションは一般的なコンテンツに対しては脆弱です。 –

22

以下は、トリックを行います:

pane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true); 

JTextPaneJEditorPaneを拡張することに注意してください。)

更新(2016年8月):

ルックを生き残るための設定については、&フィールおよびシステムの変更(たとえば、Windowsのコントロールパネルでフォントが変更された場合)、ここに行を配置することができます:

@Override 
    public void updateUI() { 
     super.updateUI(); 
     putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true); 
    } 

(これはまた、建設中に呼び出されます。)

+0

素晴らしい、ありがとう! – Mark

関連する問題