一个简单的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);
}
}
相关文章推荐
- 使用Java在本地创建一个服务器 ,通过浏览器对其进行访问的一个简单测试
- 用java写的一个简单浏览器
- java建立一个简单的图片浏览器
- 一个简单的图片浏览器(java版)
- 一个简单的JAVA线程池(只是用实验)
- Java远程调用(二)实现一个简单的服务框架
- 一个简单的 java 文件流下载函数
- 用python写了一个简单的模拟浏览器抓取网页的库webclient
- JAVA编写的一个简单的计算器
- 【jsp】当你改了一个java类或者jsp在浏览器中看不到你改的效果时
- Java产生死锁的一个简单例子
- 一个简单的Java程序例子以及其几种注释
- java返回一个简单的日历
- 用JAVA实现一个简单的登陆窗口
- 对Java的一个简单思考
- 一个简单的Java 连接SQL Server数据库连接驱动类
- Java多线程-一个简单的线程,实现挂起和恢复的功能
- Java实现一个简单的两人五子棋游戏(六) 行棋方变换
- 一个简单java爬虫爬取网页中邮箱并保存
- 一个简单的java登录小界面