ユーザインタフェース 15章 テキスト・コンポーネント2
- 15.1. javax.swing.JEditorPane
- 15.2. javax.swing.event.HyperlinkListener
- 15.3. javax.swing.JTextPane
- 15.4. javax.swing.text.EditorKit
15.2. javax.swing.event.HyperlinkListener
「JEditorPane」はそのままではリンクをクリックしても何の反応も示しません。リンクを有効にするためには「HyperlinkListener」を実装する必要があります。「HyperlinkListener」は「JEditorPane」が編集不可能モードで、リンクがクリックされた場合などに発生するイベント「HyperlinkEvent」を処理するイベントリスナーです。リンクにマウスが入っただけでもイベントは発生します。
「HyperlinkListener」は「hyperlinkUpdate」メソッドだけを持ち、引数に「HyperlinkEvent」オブジェクトを取ります。「HyperlinkEvent」は「getType」メソッドでイベントのタイプを、「getURL」でリンクのURLを取得する事ができます。「JEditorPane」の「setPage」メソッドに渡してやれば、ページの遷移を実現する事ができます。
最後に注意点ですが、複数のフレームから構成されるHTMLページの場合には、上記の方法は上手くいきません。該当するフレームではなく、ウィンドウ全体にクリックしたページが表示されてしまいます。これを避けるためには「HyperlinkEvent」クラスを拡張したクラスである「HTMLFrameHyperlinkEvent」クラスと「HTMLDocument」クラスを利用する必要があります。
(実習課題2)
実習課題1のプログラムを改良しなさい。
- リンクをクリックした際に、該当するページを表示できるようにする事。
- フレームで区切られたHTMLページにも対応できるようにする事。
- (ヒント)「hyperlinkUpdate」メソッドの引数「HyperlinkEvent」が「HTMLFrameHyperlinkEvent」オブジェクトであった場合、「HTMLDocument」クラスの「processHTMLFrameHyperlinkEvent」メソッドを呼び出す。
- (ヒント)「HTMLFrameHyperlinkEvent」オブジェクトであるかどうかの識別には「instanceof」を使用する。
- (ヒント)「HTMLDocument」オブジェクトの取得は「JEditorPane」の「getDocument」メソッドで。
- (ヒント)「JEditorPane」のAPIドキュメントを参考に。