Java Swing How to - Handle Clickable HTML link in JEditorPane








Question

We would like to know how to handle Clickable HTML link in JEditorPane.

Answer

import java.awt.Desktop;
//w w  w. j  a  v a2 s  . c o  m
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.event.HyperlinkEvent;

public class Main {
  public static void main(String[] argv) {
    JEditorPane jep = new JEditorPane();
    jep.setContentType("text/html");
    StringBuilder sb = new StringBuilder();
    sb.append("<b>Welcome</b>:<br><hr>");
    for (int i = 1; i <= 3; i++) {
      sb.append(create(i));
    }
    sb.append("<hr>");
    jep.setText(sb.toString());
    jep.setEditable(false);
    jep.addHyperlinkListener(e -> {
      if (HyperlinkEvent.EventType.ACTIVATED.equals(e.getEventType())) {
        System.out.println(e.getURL());
        Desktop desktop = Desktop.getDesktop();
        try {
          desktop.browse(e.getURL().toURI());
        } catch (Exception ex) {
          ex.printStackTrace();
        }
      }
    });

    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.add(jep);
    f.pack();
    f.setVisible(true);
  }

  private static String create(int i) {
    StringBuilder sb = new StringBuilder();
    sb.append("Welcome to <a href=");
    sb.append("'http://www.java2s.com'>Example ");
    sb.append(i);
    sb.append("</a>.<br>");
    return sb.toString();
  }
}