リンクをクリックしてジャンプする
この状態では、表示されているリンクをクリックしたりしてもまったく何も起こりません。JEditorPaneは、表示を行うだけで、リンクなどを自働的に移動してくれるわけではないのです。リンクを活かすためには、リンクを操作する際のイベント処理を用意する必要があります。
package jp.allabout;
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.net.URL;
import javax.swing.*;
import javax.swing.event.*;
public class SampleApp extends JFrame
implements ActionListener,HyperlinkListener {
JTextField url_field;
JEditorPane doc_pane;
public SampleApp(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p1 = new JPanel();
p1.setLayout(new GridLayout(1,2));
url_field = new JTextField();
p1.add(url_field);
JButton btn = new JButton("OK");
btn.addActionListener(this);
p1.add(btn);
this.add(p1,BorderLayout.NORTH);
doc_pane = new JEditorPane();
doc_pane.setEditable(false);
doc_pane.addHyperlinkListener(this);
JScrollPane scroll = new JScrollPane(doc_pane,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
this.add(scroll,BorderLayout.CENTER);
this.setSize(new Dimension(400,400));
System.out.println(doc_pane);
}
@Override
public void actionPerformed(ActionEvent e) {
try {
doc_pane.setPage(url_field.getText());
} catch (IOException e1) {
e1.printStackTrace();
}
}
@Override
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED){
try {
URL url = e.getURL();
url_field.setText(url.toString());
doc_pane.setPage(url);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
public static void main(String[] args){
new SampleApp().setVisible(true);
}
}
これで、入力フィールドにURLを書いたボタンを押し、サイトにアクセスしてみてください。今度は、リンクのところにマウスポインタを移動するとカーソルが指の形に変わり、クリックするとリンク先に移動するようになります。