The Java Program: Browser.java

  1 import java.net.URL;
  2 import java.net.MalformedURLException;
  3 import java.io.IOException;
  4 
  5 import java.awt.*;
  6 import javax.swing.JFrame;
  7 import javax.swing.JScrollPane;
  8 import javax.swing.JEditorPane;
  9 import javax.swing.event.HyperlinkEvent;
 10 import javax.swing.event.HyperlinkListener;
 11 
 12 public class Browser extends JEditorPane {
 13 
 14    static URL url;
 15 
 16    public static void init () throws IOException {
 17       final Browser browser = new Browser ();
 18       browser.setEditable (false);
 19       browser.setPage (url);   // JEditorPane takes URL as input
 20 
 21       class LinkListener implements HyperlinkListener {
 22          public void hyperlinkUpdate (HyperlinkEvent ev) {
 23             final HyperlinkEvent.EventType type = ev.getEventType();
 24             if (type == HyperlinkEvent.EventType.ACTIVATED) {
 25                try {
 26                   browser.setPage (url);
 27                   url = ev.getURL();
 28                } catch (IOException ex) {
 29                   ex.printStackTrace (System.err);
 30                }
 31             }
 32          }
 33       }
 34       browser.addHyperlinkListener (new LinkListener ());
 35       final JFrame frame = new JFrame ("Browser");
 36       frame.getContentPane().add (new JScrollPane (browser));
 37       frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); // Requires Java 1.3
 38       frame.setSize (400,300);
 39       frame.setVisible (true);
 40    }
 41 
 42    public static void main (String args[]) {
 43       if (args.length > 0) {
 44          try {
 45             url = new URL(args[0]);
 46             init ();
 47          } catch (MalformedURLException e) {
 48             System.err.println (args[0] + " is not a valid URL");
 49          } catch (IOException e) {
 50             e.printStackTrace (System.err);
 51          }
 52       } else {
 53          System.err.println ("The program requires a URL as an argument.");
 54       }
 55    }
 56 
 57 }