summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MiniBrowser.classbin0 -> 7240 bytes
-rw-r--r--MiniBrowser.java242
2 files changed, 242 insertions, 0 deletions
diff --git a/MiniBrowser.class b/MiniBrowser.class
new file mode 100644
index 0000000..b34a090
--- /dev/null
+++ b/MiniBrowser.class
Binary files differ
diff --git a/MiniBrowser.java b/MiniBrowser.java
new file mode 100644
index 0000000..56137f5
--- /dev/null
+++ b/MiniBrowser.java
@@ -0,0 +1,242 @@
+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();
+ }
+} \ No newline at end of file