⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webbrowser.java

📁 java jdk 实例宝典 源码 夏先波 编著 随书光盘源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package book.net.url;

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.google.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(){
    	
    	// 文件菜单,下面有四个菜单项:新建、打开、关闭窗口、退出
    	JMenu fileMenu = new JMenu("文件");
    	fileMenu.setMnemonic('F');
    	JMenuItem newMenuItem = new JMenuItem("新建");
    	newMenuItem.setMnemonic('N');
    	// 当“新建”时打开一个浏览器窗口
    	newMenuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            	newBrowser();
            }
        });
    	
    	JMenuItem openMenuItem = new JMenuItem("打开");
    	openMenuItem.setMnemonic('O');
    	// 当“打开”是打开文件选择器,选择待打开的文件
    	openMenuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            	openLocalPage();
            }
        });
    	
    	JMenuItem closeMenuItem = new JMenuItem("关闭窗口");
    	closeMenuItem.setMnemonic('C');
    	// 当“关闭窗口”时关闭当前窗口
    	closeMenuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            	close();
            }
        });
    	
    	JMenuItem exitMenuItem = new JMenuItem("退出");
    	exitMenuItem.setMnemonic('E');
    	// 当“退出”时退出应用程序
    	exitMenuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            	exit();
            }
        });
    	
    	fileMenu.add(newMenuItem);
    	fileMenu.add(openMenuItem);
    	fileMenu.add(closeMenuItem);
    	fileMenu.add(exitMenuItem);
    	
    	//帮助菜单,就一个菜单项:关于
    	JMenu helpMenu = new JMenu("帮助");
    	fileMenu.setMnemonic('H');
    	JMenuItem aboutMenuItem = new JMenuItem("关于");
    	aboutMenuItem.setMnemonic('A');
    	helpMenu.add(aboutMenuItem);
    	
    	JMenuBar menuBar = new JMenuBar();
    	menuBar.add(fileMenu);
    	menuBar.add(helpMenu);
    	
    	// 设置菜单栏到主窗口
    	this.setJMenuBar(menuBar);
    }
    
    /**
     * 初始化工具栏
     */
    private void initToolbar(){
    	// 后退按钮,退到前一页面。初始情况下该按钮不可用
        backButton = new JButton("后退");
        backButton.setEnabled(false);
        backButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            	back();
            }
        });
        
        // 前进按钮,进到前一页面。初始情况下该按钮不可用
        forwardButton = new JButton("前进");
        forwardButton.setEnabled(false);
        forwardButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            	forward();
            }
        });
        
        // 前进按钮,进到前一页面。初始情况下该按钮不可用
        JButton refreshButton = new JButton("刷新");
        refreshButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            	reload();
            }
        });
        
        // 主页按钮,打开主页
        JButton homeButton = new JButton("主页");
        homeButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            	home();
            }
        });
        
        JToolBar toolbar = new JToolBar();
        toolbar.add(backButton);
        toolbar.add(forwardButton);
        toolbar.add(refreshButton);
        toolbar.add(homeButton);

        // 输入网址的文本框
        urlField = new JTextField();
        // 当用户输入网址、按下回车键时,触发该事件
        urlField.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    displayPage(urlField.getText());
                }
            });

        // 地址标签
        toolbar.add(new JLabel("         地址:"));
        toolbar.add(urlField);

        // 将工具栏放在主窗口的北部
        this.getContentPane().add(toolbar, BorderLayout.NORTH);
    }

    /**
     * 设置浏览器是否在所有窗口都关闭时退出
     * @param b
     */
    public static void setExitWhenLastWindowClosed(boolean b) {
        exitWhenLastWindowClosed = b;
    }

    /**
	 * 设置主页
	 * @param home	新主页
	 */
	public void setHome(String home) {
		this.home = home;
	}
	/**
	 * 获取主页
	 */
    public String getHome() {
		return home;
	}

    /**
     * 访问网址URL
     */
    private boolean visit(URL url) {
        try {
            String href = url.toString();
            // 启动动画,当网页被加载完成时,触发propertyChanged事件,动画停止。
            startAnimation("加载 " + href + "...");
            
            // 设置显示HTML面板的page属性为待访问的URL,
            // 在这个方法里,将打开URL,将URL的流显示在textPane中。
            // 当完全打开后,该方法才结束。
            textPane.setPage(url); 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -