This Java Swing tip illustrates a method of recording mouse-over action on hyperlinks and shows the link in a status bar. The link is displayed at the bottom of the window. This tip also acts in itself as a mini browser. This tip also takes care to make the hyperlink text uneditable so that clicking doesnot change the text.

import javax.swing.*;
import javax.swing.text.*;
import java.awt.event.*;
import java.awt.*;

public class MiniBrowser extends JFrame {

  private JEditorPane jep;

  public MiniBrowser(String startingUrl) {
    // Ok, first just get a screen up and visible, with an appropriate
    // handler in place for the kill window command.

    // Now set up our basic screen components, the editor pane, the
    // text field for URLs, and the label for status and link information.
    JPanel urlPanel = new JPanel();
    urlPanel.setLayout(new BorderLayout());
    JTextField urlField = new JTextField(startingUrl);
    urlPanel.add(new JLabel("Site: "), BorderLayout.WEST);
    urlPanel.add(urlField, BorderLayout.CENTER);
    final JLabel statusBar = new JLabel(" ");

    // Here's the editor pane configuration.  It's important to make
    // the "setEditable(false)" call; otherwise, our hyperlinks won't
    // work.  (If the text is editable, then clicking on a hyperlink
    // simply means that you want to change the text, not follow the
    // link.)
    jep = new JEditorPane();

    try {
    catch(Exception e) {
      statusBar.setText("Could not open starting page.  Using a blank.");
    JScrollPane jsp = new JScrollPane(jep); 

    // Get the GUI components onto our content pane.
    getContentPane().add(jsp, BorderLayout.CENTER);
    getContentPane().add(urlPanel, BorderLayout.NORTH);
    getContentPane().add(statusBar, BorderLayout.SOUTH);

    // Last but not least, hook up our event handlers.
    urlField.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ae) {
        try {
        catch(Exception e) {
          statusBar.setText("Error: " + e.getMessage());
    jep.addHyperlinkListener(new SimpleLinkListener(jep, urlField, 

  public static void main(String args[]) {
    String url = "";
    if (args.length == 1) {
      url = args[0];
      if (!(url.startsWith("http:") || url.startsWith("file:"))) {
        // If it's not a fully qualified URL, assume it's a file.
        if (url.startsWith("/")) {
          // Absolute path, so just prepend "file:"
          url = "file:" + url;
        else {
          try {
            // Assume it's relative to the starting point.
            File f = new File(url);
            url = f.toURL().toString();
          catch (Exception e) {
            url = "";
    else {
      url = "";
    new MiniBrowser(url).setVisible(true);