package com.list;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.filechooser.FileFilter;
public class WebBrowser extends JFrame implements HyperlinkListener,
PropertyChangeListener {
public static void main(String[] args) throws IOException {
// 设置浏览器,当所有浏览器窗口都被关闭时,退出应用程序
WebBrowser.setExitWhenLastWindowClosed(true);
// 创建一个浏览器窗口
WebBrowser browser = new WebBrowser();
// 设置浏览器窗口的默认大小
browser.setSize(800, 600);
// 显示窗口
browser.setVisible(true);
// 打开主页
browser.displayPage(browser.getHome());
}
// 显示HTML的面板
JEditorPane textPane;
// 最底下的状态栏
JLabel messageLine;
// 网址URL输入栏
JTextField urlField;
// 文件选择器,打开本地文件时用
JFileChooser fileChooser;
// 后退和前进 按钮
JButton backButton;
JButton forwardButton;
JButton button;
// 保存历史记录的列表
java.util.List history = new ArrayList();
// 当前页面的在历史记录列表中位置
int currentHistoryPage = -1;
// 当历史记录超过MAX_HISTORY时,清除旧的历史
public static final int MAX_HISTORY = 50;
// 当前已经打开的浏览器窗口数
static int numBrowserWindows = 0;
// 标识当所有浏览器窗口都被关闭时,是否退出应用程序
static boolean exitWhenLastWindowClosed = false;
// 默认的主页
String home = "http://www.szu.edu.cn/szu.asp";
public WebBrowser() {
super("WebBrowser");
// 新建显示HTML的面板,并设置它不可编辑
textPane = new JEditorPane();
textPane.setEditable(false);
button = new JButton("Go!");
// 注册事件处理器,用于超连接事件。
textPane.addHyperlinkListener(this);
// 注册事件处理器,用于处理属性改变事件。当页面加载结束时,触发该事件
textPane.addPropertyChangeListener(this);
// 将HTML显示面板放入主窗口,居中显示
this.getContentPane().add(new JScrollPane(textPane),
BorderLayout.CENTER);
// 创建状态栏标签,并放在主窗口底部
messageLine = new JLabel(" ");
this.getContentPane().add(messageLine, BorderLayout.SOUTH);
// 初始化菜单和工具栏
this.initMenu();
this.initToolbar();
// 将当前打开窗口数增加1
WebBrowser.numBrowserWindows++;
// 当关闭窗口时,调用close方法处理
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
close();
}
});
}
private void initMenu() {
// 文件菜单,下面有四个菜单项:新建、打开、保存、关闭窗口、退出
JMenu fileMenu = new JMenu("文件");
fileMenu.setMnemonic('F');
JMenuItem newMenuItem = new JMenuItem("新建");
newMenuItem.setMnemonic('N');
// 当“新建”时打开一个浏览器窗口
newMenuItem.addActionListener(new ActionListener() {