java浏览器

package wd;

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.*;

// 迷你浏览器类.
public class MiniBrowser extends JFrame
   implements HyperlinkListener
{
   /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

// 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()
   {
     // 设置标题.
     super("迷你浏览器");

     // 设置窗体大小.
     setSize(640, 480);

     // Handle closing events.
     addWindowListener(new WindowAdapter() {
       public void windowClosing(WindowEvent e) {
         actionExit();
       }
     });

     // 设置文件菜单.
     JMenuBar menuBar = new JMenuBar();
     JMenu fileMenu = new JMenu("文件");
     fileMenu.setMnemonic(KeyEvent.VK_F);
     JMenuItem fileExitMenuItem = new JMenuItem("退出",
       KeyEvent.VK_X);
     fileExitMenuItem.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
         actionExit();
       }
     });
     fileMenu.add(fileExitMenuItem);
     menuBar.add(fileMenu);
     setJMenuBar(menuBar);
    
     //

     // 设置按钮栏.
     JPanel buttonPanel = new JPanel();
     backButton = new JButton("< 返回");
     backButton.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
         actionBack();
       }
     });
     backButton.setEnabled(false);
     buttonPanel.add(backButton);
     forwardButton = new JButton("前进 >");
     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("打开");
     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);
   }

   // 退出程序.
   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("该地址无效");
     }
   }

   // 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)
     {
       // 显示错误信息.
       showError("迷你浏览器无法显示该页面");
     }
     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);
       }
     }
   }

   // 运行程序(主程序).
   public static void main(String[] args) {
     MiniBrowser browser = new MiniBrowser();
     browser.show();
   }
}
相关文章
相关标签/搜索