フォントスタイルを操作する基本
では、実際にテキストの一部のスタイルを変更してみることにしましょう。ここでは一例として、一部のフォントサイズを変更するサンプルをあげておきます。
public void actionPerformed(ActionEvent e) { int fsize = 24; // フォントサイズ MutableAttributeSet attr = new SimpleAttributeSet(); StyleConstants.setFontSize(attr,fsize); StyledDocument doc = pane.getStyledDocument(); doc.setCharacterAttributes(6,6, attr, true); }

実行すると、"Hello Multi Font."と表示されたテキストのうち、Multiの部分だけが24ポイントサイズに変更されます。ここでは、7文字目から6文字分を変更するようにしてありますので、テキストを変更すればそれにあわせて指定された部分が変わります。
フォントスタイル変更の基本的な考え方は、「フォントの属性を管理するオブジェクトを用意し、それをDocumentに設定する」というものです。JTextPaneではなく、そのテキストを管理しているDocumentに対して操作を行うのが基本です。
MutableAttributeSet attr = new SimpleAttributeSet();
ここでは、まずjavax.swing.textパッケージの「MutableAttributeSet」クラスのインスタンスを作成しています。フォントの属性情報は、「AttributeSet」というインターフェースとして用意されています。Swingには、これを実装したクラスとしてAttributeSetが用意されており、通常はこれを利用します。
このMutableAttributeSetは、キーと値がセットになって情報を保管しています。これにスタイルに関する情報を保管していけばいいわけです。キーと値の設定は、直接MutableAttributeSetのメソッドを呼び出して行う方法もありますが、通常はStyleConstantsというクラスメソッドを利用します。
StyleConstants.setFontSize(attr,fsize);
このsetFontSizeは、フォントサイズに関する属性情報を設定するためのものです。第1引数にMutableAttributeSetを、第2引数に設定する値を指定します。これで、指定したフォントサイズの値がMutableAttributeSetに記録されます。
StyleConstantsには、このようにさまざまなフォントスタイル情報をMutableAttributeSetに保存するためのメソッドが用意されています。これらを利用してスタイルを設定していくことができます。主なメソッドを整理しておきましょう。いずれも、第2引数に使用したいスタイルの値を渡します。
StyleConstants.setFontSize( [MutableAttributeSet], int値 );
StyleConstants.setFontFamily( [MutableAttributeSet], [String] );
StyleConstants.setBold( [MutableAttributeSet], boolean値 ); StyleConstants.setItalic( [MutableAttributeSet], boolean値 );
StyleConstants.setAlignment( [MutableAttributeSet], int値 );
StyleConstants.setBackground( [MutableAttributeSet], [Color] ); StyleConstants.setForeground( [MutableAttributeSet], [Color] );
MutableAttributeSetにスタイル情報が設定し終えたら、それをDocument(StyledDocument)に設定します。
StyledDocument doc = pane.getStyledDocument();
doc.setCharacterAttributes(6,6, attr, true);
JTextPaneからgetStyledDocumentメソッドでStyledDocumentインスタンスを取得し、setCharacterAttributesメソッドを使って、文字にスタイル情報を設定します。これは4つの引数をもっており、それぞれ次のような値を設定します。
| 引数 | 設定内容 |
| 第1引数 | 開始位置 |
| 第2引数 | 設定範囲(文字数) |
| 第3引数 | 設定するAttributeSet |
| 第4引数 | それまでの属性情報と置き換えるか否か |
この第1引数と第2引数で、スタイル情報を設定する範囲を指定します。ということは? このメソッドを使い、複数の場所にAttributeSeを設定することもできるわけです。例として、1文字ごとにテキストの色を赤と青に色分けする例を挙げておきましょう。
public void actionPerformed(ActionEvent e) { Color c1 = Color.RED; Color c2 = Color.BLUE; MutableAttributeSet attr1 = new SimpleAttributeSet(); MutableAttributeSet attr2 = new SimpleAttributeSet(); StyledDocument doc = pane.getStyledDocument(); StyleConstants.setForeground(attr1,c1); StyleConstants.setForeground(attr2,c2); int n = doc.getLength(); for (int i = 0;i < n;i++) doc.setCharacterAttributes(i, 1, i % 2 == 0 ? attr1 : attr2, true); }

このように1文字ずつ繰り返しながら、いくつかのMutableAttributeSetを組み合わせてスタイルを設定していくことで、多彩な表現が可能になります。
