テキスト選択について
では、選択されているテキストをメニューでフォント設定するにはどうすればよいのでしょうか。これには、「選択されている領域」に関する情報が常に得られるようにしていなければいけません。
このような際に役立つのが、「CaretListener」です。これはテキストコンポーネントでキャレットの位置が変更されたときの処理を行うためのものです。これは以下のような形をしています。
public interface CaretListener extends EventListener {
void caretUpdate(CaretEvent e);
}
キャレットが変更されると、caretUpdateが呼び出されるので、ここに必要な処理を用意しておけばよいわけです。例えば、JTextPaneで選択されているテキストの開始位置と終了位置、そして選択範囲に設定されているAttributeSetを変数に取り出しておくなら、こんなクラスを用意しておけばよいでしょう。
class caretAction implements CaretListener {
public void caretUpdate(CaretEvent ev) {
selstart = textpane.getSelectionStart();
selend = textpane.getSelectionEnd();
StyledDocument doc = textpane.getStyledDocument();
selectedAttribute = doc.getCharacterElement(selstart).getAttributes();
selstart = textpane.getSelectionStart();
}
}
JTextPaneで選択されているテキスト位置を得るには、「getSelectionStart」「getSelectionEnd」といったメソッドを用います。これで、それぞれ選択範囲の開始位置と終了位置が得られます。
また選択範囲のAttributeSetを得るには、まずJTextPaneのStyledDocumentの「getCharacterElement」を呼び出します。これはキャラクタを示す要素を「Element」インスタンスとして返すものです。このElementから「getAttributes」を呼び出すことで、AttributeSetインスタンスを取り出すことができます。
こうして取り出された『選択されたテキストのAttributeSet」に対し、先に述べたように各種のスタイル情報を設定し、改めてStyledDocumentに設定してやれば、選択範囲のスタイルを変更することができる、というわけです。