Source Code : How to create a simple browser in Swing

This example shows how to create a simple browser in Swing.


The course code of the simple browser is written below:

import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.html.*;

// The Simple Web Browser.
public class MiniBrowser extends JFrame
   
  implements HyperlinkListener {
  // These are the buttons for iterating through the page list.
  private JButton backButton, forwardButton;
   
  // Page location text field.
  private JTextField locationTextField;
   
  // Editor pane for displaying pages.
  private JEditorPane displayEditorPane;
   
  // Browser's list of pages that have been visited.
  private ArrayList pageList = new ArrayList();
   
  // Constructor for Mini Web Browser.
  public MiniBrowser() {
  // Set application title.
  super("Mini Browser");
   
  // Set window size.
  setSize(640, 480);
   
  // Handle closing events.
  addWindowListener(new WindowAdapter() {
  public void windowClosing(WindowEvent e) {
  actionExit();
  }
  });
   
  // Set up file menu.
  JMenuBar menuBar = new JMenuBar();
  JMenu fileMenu = new JMenu("File");
  fileMenu.setMnemonic(KeyEvent.VK_F);
  JMenuItem fileExitMenuItem = new JMenuItem("Exit",
  KeyEvent.VK_X);
  fileExitMenuItem.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
  actionExit();
  }
  });
  fileMenu.add(fileExitMenuItem);
  menuBar.add(fileMenu);
  setJMenuBar(menuBar);
   
  // Set up button panel.
  JPanel buttonPanel = new JPanel();
  backButton = new JButton("< Back");
  backButton.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
  actionBack();
  }
  });
  backButton.setEnabled(false);
  buttonPanel.add(backButton);
  forwardButton = new JButton("Forward >");
  forwardButton.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
  actionForward();
  }
  });
  forwardButton.setEnabled(false);
  buttonPanel.add(forwardButton);
  locationTextField = new JTextField(35);
  locationTextField.addKeyListener(new KeyAdapter() {
  public void keyReleased(KeyEvent e) {
  if (e.getKeyCode() == KeyEvent.VK_ENTER) {
  actionGo();
  }
  }
  });
  buttonPanel.add(locationTextField);
  JButton goButton = new JButton("GO");
  goButton.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
  actionGo();
  }
  });
  buttonPanel.add(goButton);
   
  // Set up page display.
  displayEditorPane = new JEditorPane();
  displayEditorPane.setContentType("text/html");
  displayEditorPane.setEditable(false);
  displayEditorPane.addHyperlinkListener(this);
   
  getContentPane().setLayout(new BorderLayout());
  getContentPane().add(buttonPanel, BorderLayout.NORTH);
  getContentPane().add(new JScrollPane(displayEditorPane),
  BorderLayout.CENTER);
  }
   
  // Exit this program.
  private void actionExit() {
  System.exit(0);
  }
   
  // Go back to the page viewed before the current page.
  private void actionBack() {
  URL currentUrl = displayEditorPane.getPage();
  int pageIndex = pageList.indexOf(currentUrl.toString());
  try {
  showPage(
  new URL((String) pageList.get(pageIndex - 1)), false);
  } catch (Exception e) {}
  }
   
  // Go forward to the page viewed after the current page.
  private void actionForward() {
  URL currentUrl = displayEditorPane.getPage();
  int pageIndex = pageList.indexOf(currentUrl.toString());
  try {
  showPage(
  new URL((String) pageList.get(pageIndex + 1)), false);
  } catch (Exception e) {}
  }
   
  // Load and show the page specified in the location text field.
  private void actionGo() {
  URL verifiedUrl = verifyUrl(locationTextField.getText());
  if (verifiedUrl != null) {
  showPage(verifiedUrl, true);
  } else {
  showError("Invalid URL");
  }
  }
   
  // Show dialog box with error message.
  private void showError(String errorMessage) {
  JOptionPane.showMessageDialog(this, errorMessage,
  "Error", JOptionPane.ERROR_MESSAGE);
  }
   
  // Verify URL format.
  private URL verifyUrl(String url) {
  // Only allow HTTP URLs.
  if (!url.toLowerCase().startsWith("http://"))
  return null;
   
  // Verify format of URL.
  URL verifiedUrl = null;
  try {
  verifiedUrl = new URL(url);
  } catch (Exception e) {
  return null;
  }
   
  return verifiedUrl;
  }
   
  /* Show the specified page and add it to
  the page list if specified. */
  private void showPage(URL pageUrl, boolean addToList) {
  // Show hour glass cursor while crawling is under way.
  setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
   
  try {
  // Get URL of page currently being displayed.
  URL currentUrl = displayEditorPane.getPage();
   
  // Load and display specified page.
  displayEditorPane.setPage(pageUrl);
   
  // Get URL of new page being displayed.
  URL newUrl = displayEditorPane.getPage();
   
  // Add page to list if specified.
  if (addToList) {
  int listSize = pageList.size();
  if (listSize > 0) {
  int pageIndex =
  pageList.indexOf(currentUrl.toString());
  if (pageIndex < listSize - 1) {
  for (int i = listSize - 1; i > pageIndex; i--) {
  pageList.remove(i);
  }
  }
  }
  pageList.add(newUrl.toString());
  }
   
  // Update location text field with URL of current page.
  locationTextField.setText(newUrl.toString());
   
  // Update buttons based on the page being displayed.
  updateButtons();
  } catch (Exception e) {
  // Show error messsage.
  showError("Unable to load page");
  } finally {
  // Return to default cursor.
  setCursor(Cursor.getDefaultCursor());
  }
  }
   
  /* Update back and forward buttons based on
  the page being displayed. */
  private void updateButtons() {
  if (pageList.size() < 2) {
  backButton.setEnabled(false);
  forwardButton.setEnabled(false);
  } else {
  URL currentUrl = displayEditorPane.getPage();
  int pageIndex = pageList.indexOf(currentUrl.toString());
  backButton.setEnabled(pageIndex > 0);
  forwardButton.setEnabled(
  pageIndex < (pageList.size() - 1));
  }
  }
   
  // Handle hyperlink's being clicked.
  public void hyperlinkUpdate(HyperlinkEvent event) {
  HyperlinkEvent.EventType eventType = event.getEventType();
  if (eventType == HyperlinkEvent.EventType.ACTIVATED) {
  if (event instanceof HTMLFrameHyperlinkEvent) {
  HTMLFrameHyperlinkEvent linkEvent =
  (HTMLFrameHyperlinkEvent) event;
  HTMLDocument document =
  (HTMLDocument) displayEditorPane.getDocument();
  document.processHTMLFrameHyperlinkEvent(linkEvent);
  } else {
  showPage(event.getURL(), true);
  }
  }
  }
   
  // Run the Mini Browser.
  public static void main(String[] args) {
  MiniBrowser browser = new MiniBrowser();
  browser.show();
  }
}