Javaプログラミング/Javaプログラミング関連情報

マルチフォントのテキストエディタを作る(2ページ目)

Javaでマルチフォントを扱うのは、意外に面倒です。ごく簡単なマルチフォント対応テキストエディタを作ってみましょう。

執筆者:掌田 津耶乃

JTextPaneとDocument


普段、Swingでテキスト入力を行うときには、JTextFieldやJTextAreaといったものを利用します。が、これらはマルチフォントに対応していません。マルチフォントでテキストを扱う場合には、「JTextPane」を利用します。このJTextPaneは、「Document」と呼ばれるモデルを持っています。これはテキストを構造的に管理するためのモデルで、このモデルによってシンプルなテキストやHTMLなどさまざまな構造のテキストを扱えるようになります。

マルチフォントを利用する場合には、スタイル付テキストのためのモデル「StyledDocument」と呼ばれるものを利用します。これはインターフェイスですので、通常はこれを実装した「DefaultStyledDocument」と呼ばれるものを使います。例えば、新規にドキュメントをJTextPaneに設定するにはどうすればよいでしょうか。

public void newDoc(){
  StyleContext style = new StyleContext();
  DefaultStyledDocument doc = new DefaultStyledDocument(style);
  textpane.setDocument(doc);
}


StyleContextは、DefaultStyledDocumentのコンテキストとなるオブジェクトです。これを引数に指定してDefaultStyledDocumentインスタンスを作成し、これをJTextPaneにsetDocumentで設定すると、新しいドキュメントとして使えるようになります。

このDefaultStyledDocumentでは、それぞれのキャラクタやパラグラフごとにスタイル情報を設定することができます。これは、アトリビュート(AttributeSet)として用意されており、この中にスタイル情報を設定していきます。このアトリビュートは、通常、AttributeSetを継承した「MutableAttributeSet」というインターフェイスを実装したクラスを使います。クラスライブラリには標準で「SimpleAttributeSet」クラスが用意されています。

例えば、SimpleAttributeSetを作成してフォント名、フォントサイズ、テキストカラーを設定し、ドキュメントの最初の文字にそのスタイルを適用する場合の処理を考えて見ましょう。

MutableAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setFontFamily(attr, "Monaco");
StyleConstants.setFontSize(attr,12);
StyleConstants.setForeground(attr,Color.BLACK);
doc.setCharacterAttributes(0,1,attr,true);


「StyleConstants」というのは、スタイル関係の値やそのためのメソッドなどを持つコレクションクラスで、ここに用意されているメソッドを呼び出すことで、指定のAttributeSetにスタイル情報を組み込むことができます。

ここでは「setFontFamily」「setFontSize」「setForeground」といったメソッドを使っていますね。これらはそれぞれフォントファミリー名、フォントサイズ、テキストカラーを設定する働きをします。いずれも第1引数に割り付けるAttributeSetを、第2引数に設定する値を指定します。

こうして作成したAttributeSetを、StyledDocumentの「setCharacterAttributes」を使ってドキュメントに設定します。このメソッドは、適応するキャラクタの場所を示すint値2つ(開始位置とキャラクタ数)、適用するAttributeSet、古い属性を置換するかどうかを示すboolean値の4つの引数で指定されます。

StyleConstantsには、この他にもボールドやイタリックのスタイル、背景色などのスタイルを設定するためのメソッド類が用意されています。興味のある人は調べてみると面白いでしょう。


  • 前のページへ
  • 1
  • 2
  • 3
  • 7
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます