import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
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.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.filechooser.FileFilter;
/**
* 实现一个简单的Web浏览器,支持HTML和HTM页面的显示。使用了JEditorPane组件
**/
public class WebBrowser extends JFrame implements HyperlinkListener,
PropertyChangeListener {
/**下面是使用的Swing组件**/
// 显示HTML的面板
JEditorPane textPane;
// 最底下的状态栏
JLabel messageLine;
// 网址URL输入栏
JTextField urlField;
// 文件选择器,打开本地文件时用
JFileChooser fileChooser;
// 后退和前进 按钮
JButton backButton;
JButton forwardButton;
// 保存历史记录的列表
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.hao123.com/";
/**
* 构造函数
*/
public WebBrowser() {
super("WebBrowser");
// 新建显示HTML的面板,并设置它不可编辑
textPane = new JEditorPane();
textPane.setEditable(false);
// 注册事件处理器,用于超连接事件。
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(){
// 文件菜单,下面有四个菜单项:新建、打开