SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Swing再入門

Swing再入門 マルチフォントへの対応

第4回 JTextPaneを使用したリッチテキストの利用

フォントスタイルを操作する基本

 では、実際にテキストの一部のスタイルを変更してみることにしましょう。ここでは一例として、一部のフォントサイズを変更するサンプルをあげておきます。

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ポイントに変更される
メニューを選ぶと、"Hello Multi Font."のMultiだけが24ポイントに変更される

 実行すると、"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文字ごとに変更する
メニューを選ぶと、テキストの色を1文字ごとに変更する

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

次のページ
選択されたテキストのスタイル変更

この記事は参考になりましたか?

Swing再入門連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1717 2007/10/10 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー