天天看點

java版浏覽器_java版浏覽器彙總

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() {

public void actionPerformed(ActionEvent e) {

newBrowser();

}

});

JMenuItem openMenuItem = new JMenuItem("打開");

openMenuItem.setMnemonic('O');

// 當“打開”是打開檔案選擇器,選擇待打開的檔案

openMenuItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

openLocalPage();

}

});

// 儲存

JMenuItem saveMenuItem = new JMenuItem("儲存");

saveMenuItem.setMnemonic('S');

saveMenuItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

saveLocalPage();

}

});

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(saveMenuItem);

fileMenu.add(closeMenuItem);

fileMenu.add(exitMenuItem);

// 設定快捷鍵

newMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,

InputEvent.CTRL_MASK));

openMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,

InputEvent.CTRL_MASK));

saveMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,

InputEvent.CTRL_MASK));

exitMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,

InputEvent.CTRL_MASK));

closeMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,

InputEvent.CTRL_MASK));

// 幫助菜單,就一個菜單項:關于

JMenu helpMenu = new JMenu("幫助");

fileMenu.setMnemonic('H');

JMenuItem aboutMenuItem = new JMenuItem("關于");

aboutMenuItem.setMnemonic('A');

helpMenu.add(aboutMenuItem);

aboutMenuItem.setAccelerator(KeyStroke.getKeyStroke('A'));

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();

// 當使用者輸入網址、按下Enter鍵時,觸發該事件

urlField.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

displayPage(urlField.getText());

}

});

// 當"Go!"按鈕按下時

urlField.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

displayPage(urlField.getText());

}

});

// 位址标簽

toolbar.add(new JLabel(" 位址欄"));

toolbar.add(urlField);

toolbar.add(button);

// 将工具欄放在主視窗的北部

this.getContentPane().add(toolbar, BorderLayout.NORTH);

}

// 設定浏覽器是否在所有視窗都關閉時退出

public static void setExitWhenLastWindowClosed(boolean b) {

exitWhenLastWindowClosed = b;

}

// 設定首頁

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);

// 頁面打開後,将浏覽器視窗的标題設為URL

this.setTitle(href);

// 網址輸入框的内容也設定為URL

urlField.setText(href);

return true;

} catch (IOException ex) {

// 停止動畫

stopAnimation();

// 狀态欄中顯示錯誤資訊

messageLine.setText("不能打開頁面:" + ex.getMessage());

return false;

}

}

// 浏覽器打開URL指定的頁面,如果成功,将URL放入曆史清單中

public void displayPage(URL url) {

// 嘗試通路頁面

if (visit(url)) {

// 如果成功,則将URL放入曆史清單中。

history.add(url);

int numentries = history.size();

if (numentries > MAX_HISTORY + 10) {

history = history.subList(numentries - MAX_HISTORY, numentries);

numentries = MAX_HISTORY;

}

// 将目前頁面下标置為numentries-1

currentHistoryPage = numentries - 1;

// 如果目前頁面不是第一個頁面,則可以後退,允許點選後退按鈕。

if (currentHistoryPage > 0) {

backButton.setEnabled(true);

}

}

}

// 浏覽器打開字元串指定的頁面

public void displayPage(String href) {

try {

// 預設為HTTP協定

if (!href.startsWith("http://")) {

href = "http://" + href;

}

displayPage(new URL(href));

} catch (MalformedURLException ex) {

messageLine.setText("錯誤的網址: " + href);

}

}

// 打開本地檔案

public void openLocalPage() {

// 使用“建立”模式,當需要時,才建立檔案選擇器。

if (fileChooser == null) {

fileChooser = new JFileChooser();

// 使用檔案過濾器限制隻能夠HTML和HTM檔案

FileFilter filter = new FileFilter() {

public boolean accept(File f) {

String fn = f.getName();

if (fn.endsWith(".html") || fn.endsWith(".htm")) {

return true;

} else {

return false;

}

}

public String getDescription() {

return "HTML Files";

}

};

fileChooser.setFileFilter(filter);

// 隻允許選擇HTML和HTM檔案

fileChooser.addChoosableFileFilter(filter);

}

// 打開檔案選擇器

int result = fileChooser.showOpenDialog(this);

// 如果确定打開檔案,則在目前視窗中打開選擇的檔案

if (result == JFileChooser.APPROVE_OPTION) {

File selectedFile = fileChooser.getSelectedFile();

try {

displayPage(selectedFile.toURL());

} catch (MalformedURLException e) {

e.printStackTrace();

}

}

}

// 打開儲存檔案夾

public void saveLocalPage() {

if (fileChooser == null) {

fileChooser = new JFileChooser();

// 打開檔案選擇器

int result = fileChooser.showSaveDialog(this);

// 如果确定打開檔案,則在目前視窗中打開選擇的檔案

if (result == JFileChooser.APPROVE_OPTION) {

File selectedFile = fileChooser.getSelectedFile();

try {

displayPage(selectedFile.toURL());

} catch (MalformedURLException e) {

e.printStackTrace();

}

}

}

}

// 後退,回到前一頁

public void back() {

if (currentHistoryPage > 0) {

// 通路前一頁

visit((URL) history.get(--currentHistoryPage));

}

// 如果目前頁面下标大于0,允許後退

backButton.setEnabled((currentHistoryPage > 0));

// 如果目前頁面下标不是最後,允許前進

forwardButton.setEnabled((currentHistoryPage < history.size() - 1));

}

// 前進,回到後一頁

public void forward() {

if (currentHistoryPage < history.size() - 1) {

visit((URL) history.get(++currentHistoryPage));

}

// 如果目前頁面下标大于0,允許後退

backButton.setEnabled((currentHistoryPage > 0));

// 如果目前頁面下标不是最後,允許前進

forwardButton.setEnabled((currentHistoryPage < history.size() - 1));

}

// 重新加載目前頁面

public void reload() {

if (currentHistoryPage != -1) {

// 先顯示為空白頁

textPane.setDocument(new javax.swing.text.html.HTMLDocument());

// 再通路目前頁

visit((URL) history.get(currentHistoryPage));

}

}

// 顯示首頁

public void home() {

displayPage(getHome());

}

// 打開新的浏覽器視窗

public void newBrowser() {

WebBrowser b = new WebBrowser();

// 新視窗大小和目前視窗一樣大

b.setSize(this.getWidth(), this.getHeight());

b.setVisible(true);

}

// 關閉目前視窗,如果所有視窗都關閉,則根據exitWhenLastWindowClosed屬性,判斷是否退出應用程式

public void close() {

// 先隐藏目前視窗,銷毀視窗中的元件。

this.setVisible(false);

this.dispose();

// 将目前打開視窗數減1。

// 如果所有視窗都已關閉,而且exitWhenLastWindowClosed為真,則退出

// 這裡采用了synchronized關鍵字,保證線程安全

synchronized (WebBrowser.class) {

WebBrowser.numBrowserWindows--;

if ((numBrowserWindows == 0) && exitWhenLastWindowClosed) {

System.exit(0);

}

}

}

// 退出應用程式

public void exit() {

// 彈出對話框,請求确認,如果确認退出,則退出應用程式

if ((JOptionPane.showConfirmDialog(this, "你是否确定退出Web浏覽器?", "退出",

JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)) {

System.exit(0);

}

}

// 實作HyperlinkListener接口。處理超連接配接事件

public void hyperlinkUpdate(HyperlinkEvent e) {

// 擷取事件類型

HyperlinkEvent.EventType type = e.getEventType();

// 如果是點選了一個超連接配接,則顯示被點選的連接配接

if (type == HyperlinkEvent.EventType.ACTIVATED) {

displayPage(e.getURL());

}

// 如果是滑鼠移動到超連接配接上,則在狀态欄中顯示超連接配接的網址

else if (type == HyperlinkEvent.EventType.ENTERED) {

messageLine.setText(e.getURL().toString());

}

// 如果是滑鼠離開了超連接配接,則狀态欄顯示為空

else if (type == HyperlinkEvent.EventType.EXITED) {

messageLine.setText(" ");

}

}

public void propertyChange(PropertyChangeEvent e) {

if (e.getPropertyName().equals("page")) {

// 頁面加載完畢時,textPane的page屬性發生改變,此時停止動畫。

stopAnimation();

}

}

// 動畫消息,顯示在最底下狀态欄标簽上,用于回報浏覽器的狀态

String animationMessage;

// 動畫目前的幀的索引

int animationFrame = 0;

// 動畫所用到的幀,是一些字元。

String[] animationFrames = new String[] { "-", "\\", "|", "/", "-", "\\",

"|", "/", ",", ".", "o", "0", "O", "#", "*", "+" };

// 建立一個Swing的定時器,每個125毫秒更新一次狀态欄标簽的文本

javax.swing.Timer animator = new javax.swing.Timer(125,

new ActionListener() {

public void actionPerformed(ActionEvent e) {

animate();

}

});

// 顯示動畫的目前幀到狀态欄标簽上,并将幀索引後移

private void animate() {

String frame = animationFrames[animationFrame++];

messageLine.setText(animationMessage + " " + frame);

animationFrame = animationFrame % animationFrames.length;

}

// 啟動動畫

private void startAnimation(String msg) {

animationMessage = msg;

animationFrame = 0;

// 啟動定時器

animator.start();

}

// 停止動畫

private void stopAnimation() {

// 停止定時器

animator.stop();

messageLine.setText(" ");

}

}

2.調用浏覽器代開并非真正的java浏覽器

package com.list;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

public class Browser {

public static void main(String[] args) {

JFrame frame = new JFrame();

JPanel panel = new JPanel();

final JTextField url = new JTextField(20);

JButton button = new JButton("Open Browser");

button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

OpenBrowser.openURL(url.getText().trim());

}

});

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel.add(new JLabel("URL:"));

panel.add(url);

panel.add(button);

frame.getContentPane().add(panel);

frame.pack();

frame.setVisible(true);

}

}

package com.list;

import javax.swing.JOptionPane;

public class OpenBrowser {

public static void openURL(String url) {

String osName = System.getProperty("os.name");

try {

if (osName.startsWith("Windows"))

Runtime.getRuntime().exec(

"rundll32 url.dll,FileProtocolHandler " + url);

else {

String[] browsers = { "firefox", "opera", "konqueror",

"epiphany", "mozilla", "netscape" };

String browser = null;

for (int count = 0; count < browsers.length && browser == null; count++)

if (Runtime.getRuntime()

.exec(new String[] { "which", browsers[count] })

.waitFor() == 0)

browser = browsers[count];

Runtime.getRuntime().exec(new String[] { browser, url });

}

} catch (Exception e) {

JOptionPane.showMessageDialog(null, "Error in opening browser"

+ ":\n" + e.getLocalizedMessage());

}

}

}

這個位址:http://blog.csdn.net/lxf9601/article/details/6967167

http://download.csdn.net/download/ajaxhu/6394751

分享到:

java版浏覽器_java版浏覽器彙總
java版浏覽器_java版浏覽器彙總

2014-02-28 12:42

浏覽 710

評論