您的位置:首页 > 编程语言 > Java开发

一个简单的java浏览器

2009-01-15 15:10 246 查看


========= HWebBrowser.java =========

import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.MouseListener;
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.border.*;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileView;
import java.io.*;
import java.net.*;
import java.util.*;

/**
*@author B.Y HuanG
*/
public class HWebBrowser extends JFrame implements HyperlinkListener,ActionListener{

//界面基本控件
private Toolkit tkDf; //默认工具包
private JToolBar tbrMain; //工具栏
private JLabel lblURL; //地址栏标签
private JButton btnGO; //URL跳转按钮
private JTextField txtURL; //地址栏
private JEditorPane etpWeb; //网页框
private JScrollPane srpWeb; //滚动条
private JFileChooser fc; //文件选择器

//菜单栏
private JMenuBar mbrMain; //菜单栏

private JMenu fileMenu; //文件菜单组
private JMenuItem saveAsItem; //另存为
private JMenuItem exitItem; //退出

private JMenu bookmarkMenu; //标签菜单组
private JMenuItem saveBMItem;//保存标签

private JMenu editMenu; //编辑菜单组
private JMenuItem backItem; //退后
private JMenuItem forwardItem; //前进

private JMenu viewMenu; //视图菜单组
private JMenuItem fullscreenItem; //全屏视图
private JMenuItem sourceItem; //源码视图
private JMenuItem reloadItem; //重载

//工具栏
private JButton btnSaveAs; //另存为按钮
private JButton btnBack; //退后按钮
private JButton btnForward;//前进按钮
private JButton btnSource;//源码视图按钮
private JButton btnExit; //退出按钮

//创建一个从左到右显示其组件
private Box bxs;

//声明一个List用于存放访问过的URL
private ArrayList htys = new ArrayList();
private int htysIndex;

/**
*初始化界面控件
*并配置控件 */
public void init(){
//获取默认工具包
tkDf = Toolkit.getDefaultToolkit();

//基本控件
tbrMain = new JToolBar();

lblURL = new JLabel("地址:");
btnGO = new JButton("转到");
txtURL = new JTextField();
etpWeb = new JEditorPane();
etpWeb.setEditable(false);
srpWeb = new JScrollPane(etpWeb);
fc = new JFileChooser();

//菜单栏
mbrMain = new JMenuBar();

fileMenu = new JMenu("文件(F)");
saveAsItem = new JMenuItem("另存为(S)");
exitItem = new JMenuItem("退出(E)");

bookmarkMenu = new JMenu("标签(B)");
saveBMItem = new JMenuItem("保存标签(K)");

editMenu = new JMenu("编辑(E)");
backItem = new JMenuItem("退后(Z)");
forwardItem = new JMenuItem("前进(A)");

viewMenu = new JMenu("视图(L)");
fullscreenItem = new JMenuItem("全屏(M)");
sourceItem = new JMenuItem("源码(C)");
reloadItem = new JMenuItem("重载(R)");

//工具栏
btnSaveAs = new JButton("另存为");
btnBack = new JButton("退后");
btnForward = new JButton("前进");
btnSource = new JButton("源码");
btnExit = new JButton("退出");

bxs =Box.createHorizontalBox();
}

/**
*构造器*/
public HWebBrowser(String title){
super(title);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setSize(500,400);

//初始化控件
init();
disDefault();
//菜单栏
fileMenu.add(saveAsItem);
fileMenu.addSeparator();
fileMenu.add(exitItem);

bookmarkMenu.add(saveBMItem);

editMenu.add(backItem);
editMenu.addSeparator();
editMenu.add(forwardItem);

viewMenu.add(fullscreenItem);
viewMenu.addSeparator();
viewMenu.add(sourceItem);
viewMenu.addSeparator();
viewMenu.add(reloadItem);

mbrMain.add(fileMenu);
mbrMain.add(bookmarkMenu);
mbrMain.add(editMenu);
mbrMain.add(viewMenu);

bxs.add(lblURL);
bxs.add(txtURL);
bxs.add(btnGO);

//工具栏
tbrMain.add(btnSaveAs);
tbrMain.addSeparator();
tbrMain.add(btnBack);
tbrMain.addSeparator();
tbrMain.add(btnForward);
tbrMain.addSeparator();
tbrMain.add(btnSource);
tbrMain.addSeparator();
tbrMain.add(btnExit);
tbrMain.addSeparator();
tbrMain.add(bxs);

Container ctr = getContentPane();
ctr.setLayout(new BorderLayout());
//设置菜单栏
setJMenuBar(mbrMain);
//设置工具栏
ctr.add(tbrMain,BorderLayout.NORTH);
//设置网页框
ctr.add(srpWeb,BorderLayout.CENTER);

//注册相应事件
etpWeb.addHyperlinkListener(this);
btnGO.addActionListener(this);
btnBack.addActionListener(this);
txtURL.addActionListener(this);
btnExit.addActionListener(this);
btnSaveAs.addActionListener(this);
saveAsItem.addActionListener(this);
btnForward.addActionListener(this);
fullscreenItem.addActionListener(this);
sourceItem.addActionListener(this);
btnSource.addActionListener(this);
backItem.addActionListener(this);
forwardItem.addActionListener(this);
exitItem.addActionListener(this);
}

public void actionPerformed(ActionEvent evt){
String curl = "";
try{
//点击转到按钮
if(evt.getSource() == btnGO){
curl = txtURL.getText();
if(curl.length() > 0 && curl.startsWith("http://")){
etpWeb.setPage(new URL(curl));
htysIndex = htys.size() -1;
//往历史列表中添加访问过的url
htys.add(curl);
}
}
//在地址栏回车
if(evt.getSource() == txtURL){
curl = txtURL.getText();
if(curl.length() > 0 && curl.startsWith("http://")){
etpWeb.setPage(new URL(curl));
htysIndex = htys.size() -1;
//往历史列表中添加访问过的url
htys.add(curl);
}
}
//点击退出
if(evt.getSource() == btnExit || evt.getSource() == exitItem){
System.exit(0);
}
//点击另存为
if(evt.getSource() == btnSaveAs || evt.getSource() == saveAsItem){
curl = txtURL.getText();
if(curl.length() > 0 && curl.startsWith("http://")){
saveFile(curl);
}
}
//点击后退按钮
if(evt.getSource() == btnBack || evt.getSource() == backItem){
htysIndex--;
if(htysIndex < 0){
htysIndex = 0;
return;
}
curl = txtURL.getText();
curl =(String)htys.get(htysIndex);
etpWeb.setPage(new URL(curl));
txtURL.setText(curl);
}
//点击前进按钮
if(evt.getSource() == btnForward || evt.getSource() == forwardItem){
htysIndex++;
if(htysIndex >= (htys.size()-1)){
htysIndex = htys.size()-1;
return;
}
curl =(String)htys.get(htysIndex);
etpWeb.setPage(new URL(curl));
txtURL.setText(curl.toString());
}
//点击全屏菜单
if(evt.getSource() == fullscreenItem){
Dimension dms = tkDf.getScreenSize();
setSize(dms.width,dms.height);
repaint();
}
//点击查看源码
if(evt.getSource() == btnSource || evt.getSource() == sourceItem){
curl = txtURL.getText();
new CodeView(curl,getHtmlSource(curl));
}
}catch(Exception ex){
JOptionPane.showMessageDialog(this,ex.toString(),"错误",JOptionPane.ERROR_MESSAGE);
}
}

/**
*设置启动时默认页面*/
public void disDefault(){
txtURL.setText("http://www.byhuang.cn");
etpWeb.setContentType("text/html");
etpWeb.setText("<html><h1>欢迎使用B.Y浏览器</h1><b>QQ:316583238 <br>Email:yi520na@126.com</b></html>");
}

/**
*另存页面
*@param curl String*/
public void saveFile(final String curl){
final String linesep=System.getProperty("line.separator");
//HFileFilter hf = new HFileFilter("html",new String[]{"html","htm","jsp"} );
//fc.addChoosableFileFilter(hf);
//设置当前目录
fc.setCurrentDirectory(new File("."));
//设置文件窗体类型
fc.setDialogType(JFileChooser.SAVE_DIALOG);
//设置文件窗体标题
fc.setDialogTitle("另存为..");

if(fc.showSaveDialog(this) != JFileChooser.APPROVE_OPTION){
return;
}
repaint();
//开启一个线程来保存文件
Thread t = new Thread(){
public void run(){
try{
//建立远程url连接,并读取远程服务器发送的文件
URL dourl = new URL(curl);
InputStream in =new BufferedInputStream(dourl.openStream());
BufferedReader br = new BufferedReader(new InputStreamReader(in));
//获取选中的文件
File dofile = fc.getSelectedFile();
FileWriter out = new FileWriter(dofile);
BufferedWriter bw = new BufferedWriter(out);
String line = null;
while((line = br.readLine()) != null){
bw.write(line);
bw.newLine();
}
bw.close();
br.close();

String msg=curl+" 已保存在!"+linesep+dofile.getAbsolutePath();
JOptionPane.showMessageDialog((Component)null,msg,"另存为",JOptionPane.INFORMATION_MESSAGE);
}catch(Exception ex){
JOptionPane.showMessageDialog((Component)null,ex.toString(),"错误",JOptionPane.ERROR_MESSAGE);
}
}
};

//开启保存文件线程
t.start();
}

/**
*查看源码
*@param curl String*/
public StringBuffer getHtmlSource(String curl){
StringBuffer sbf = new StringBuffer();
String linesep = System.getProperty("line.separator");
try{
URL dourl = new URL(curl);
BufferedReader br = new BufferedReader(new InputStreamReader(dourl.openStream()));
String line = null;
while((line = br.readLine()) != null){
sbf.append(line);
sbf.append("/r/n");
}
br.close();
}catch(IOException ex){
JOptionPane.showMessageDialog(this,ex.toString(),"错误",JOptionPane.ERROR_MESSAGE);
}
return sbf;
}

/**
*实现HyperlinkListener接口的方法*/
public void hyperlinkUpdate(HyperlinkEvent evt){
try{
//如果选中或者激活超链接
if(evt.getEventType() == HyperlinkEvent.EventType.ACTIVATED){
/*此段代码是弹出一个新的窗口,但是之后关闭任何窗口
*程序都会被终止
HWebBrowser hwb = new HWebBrowser("B.Y浏览器");
hwb.txtURL.setText(evt.getURL().toString());
hwb.etpWeb.setPage(evt.getURL());
*/
etpWeb.setPage(evt.getURL());
htys.add(evt.getURL());
htysIndex = htys.size() -1;
txtURL.setText(evt.getURL().toString());
}
}catch(IOException ex){
JOptionPane.showMessageDialog(this,ex.toString(),"错误",JOptionPane.ERROR_MESSAGE);
}
}

public static void main(String[]args) throws Exception{
new HWebBrowser("B.Y 浏览器");;
}
}

========== CodeView.java =========

import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.awt.event.*;
import javax.swing.event.*;

class CodeView extends JFrame{
private StringBuffer sbf;
private JTextArea txtCode;
private JButton btnDis;
public CodeView(String title,StringBuffer sbf){
super(title);
this.sbf = sbf;
txtCode = new JTextArea();
txtCode.setLineWrap(true);
txtCode.setText(sbf.toString());

btnDis = new JButton("关闭");
btnDis.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
dispose();
}
});

Container ctr = getContentPane();
ctr.add(txtCode,BorderLayout.CENTER);
ctr.add(btnDis,BorderLayout.NORTH);
//setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,400);
setVisible(true);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: