网页浏览器开发
来源:互联网 发布:群发短信软件 编辑:程序博客网 时间:2024/04/30 03:46
//WebBrowser.java
package com.jacky;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.*;public class WebBrowser extends JFrame implements HyperlinkListener,ActionListener{ //建立菜单栏JMenuBar jMenuBar1=new JMenuBar();//建立菜单组JMenu fileMenu=new JMenu("文件(F)");//建立菜单项JMenuItem saveAsItem=new JMenuItem("另存为(A)...");JMenuItem exitItem=new JMenuItem("退出(I)");JMenu editMenu=new JMenu("编辑(E)");JMenuItem forwardItem=new JMenuItem("前进");JMenuItem backItem=new JMenuItem("后退");JMenu viewMenu=new JMenu("视图(V)");JMenuItem fullscreenItem=new JMenuItem("全屏(U)");JMenuItem sourceItem=new JMenuItem("查看源码(C)");JMenuItem reloadItem=new JMenuItem("刷新(R)");// 建立工具栏JToolBar toolBar1=new JToolBar();//建立工具栏中的按钮组件JButton SaveButton=new JButton("另存为");JButton ForwardButton=new JButton("前进");JButton BackButton=new JButton("后退");
JButton ViewButton=new JButton("查看源代码");JButton ExitButton=new JButton("退出");//建立工具栏用来显示地址栏JToolBar toolBar2=new JToolBar();//建立地址栏中的组件JLabel label=new JLabel("地址");JTextField jurl=new JTextField(50);JButton turnbutton=new JButton("转向");JButton RestoreButton=new JButton("窗口还原");// 建立网页显示界面JEditorPane jEditorPane=new JEditorPane();//网页文本框JScrollPane scrollPane=new JScrollPane(jEditorPane);JFileChooser chooser=new JFileChooser();//构造文件选择器JFileChooser chooser1=new JFileChooser();String htmlSource;JWindow window=new JWindow(WebBrowser.this);//使用指定的所有者框架创建窗口Toolkit toolkit=Toolkit.getDefaultToolkit();//获取默认工具包Box box=Box.createHorizontalBox();//创建一个从左到右显示其组件
//ArrayList对象,用来存放历史地址private ArrayList history=new ArrayList();//整型变量,表示历史地址的访问顺序private int historyIndex;/*构造函数 * 初始化图形用户界面*/public WebBrowser(){setTitle ("网页浏览器");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口,不写的话,界面是没了,但程序还驻留在 内存中没有结束。setResizable(false);//不能手动改变框架大小 //为jEditorPane添加事件侦听jEditorPane.addHyperlinkListener(this);jMenuBar1.add(fileMenu);jMenuBar1.add(editMenu);jMenuBar1.add(viewMenu);setJMenuBar(jMenuBar1);//将菜单栏加入到框架中//将菜单项saveAsItem加入到菜单组fileMenu中fileMenu.add(saveAsItem);
fileMenu.addSeparator();fileMenu.add(exitItem);fileMenu.setMnemonic('F');//为组件fileMenu设置热键'F'
saveAsItem.setMnemonic('S');saveAsItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); //为"另存为"组件设置快捷键ctrl+sexitItem.setMnemonic('Q');exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_MASK));
editMenu.add(backItem);editMenu.add(forwardItem);
editMenu.setMnemonic('E');backItem.setMnemonic('B');backItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK));forwardItem.setMnemonic('D');forwardItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));viewMenu.add(fullscreenItem);
viewMenu.add(sourceItem);
viewMenu.addSeparator();viewMenu.add(reloadItem); viewMenu.setMnemonic('V');fullscreenItem.setMnemonic('U');fullscreenItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,InputEvent.CTRL_MASK));
sourceItem.setMnemonic('C');sourceItem.setMnemonic('C');
sourceItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));reloadItem.setMnemonic('R');reloadItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R,InputEvent.CTRL_MASK)); //在工具栏中添加按钮组件 toolBar1.add(SaveButton);toolBar1.addSeparator();toolBar1.add(ForwardButton);toolBar1.addSeparator();toolBar1.add(BackButton);toolBar1.addSeparator(); toolBar1.add(ViewButton);toolBar1.addSeparator();toolBar1.add(ExitButton);box.add(label);box.add(jurl);box.add(turnbutton);toolBar2.add(box);
Container contentPane=getContentPane();//建立一个contaniner用来装各种组件 scrollPane.setPreferredSize(new Dimension(100,400));//设置大小contentPane.add(scrollPane,BorderLayout.SOUTH);contentPane.add(toolBar1,BorderLayout.NORTH);contentPane.add(toolBar2,BorderLayout.CENTER);//为组件添加事件监听
saveAsItem.addActionListener(this);forwardItem.addActionListener(this);backItem.addActionListener(this);exitItem.addActionListener(this);fullscreenItem.addActionListener(this);
sourceItem.addActionListener(this);reloadItem.addActionListener(this);SaveButton.addActionListener(this);ForwardButton.addActionListener(this);BackButton.addActionListener(this);
ViewButton.addActionListener(this);ExitButton.addActionListener(this);jurl.addActionListener(this);turnbutton.addActionListener(this); } /*实现监听器接口的actionPerformed函数*/public void actionPerformed(ActionEvent e){String url="";//点击转向按钮if(e.getSource()==turnbutton){//获得地址栏的内容url=jurl.getText();//getText()表示将当前文本作为字符串返回//url不为"",并且以"http://"开头if(url.length()>0&&url.startsWith("http://")){ try { //JEditorPane组件显示url的内容链接 jEditorPane.setPage(url); //将url的内容添加到ArrayList对象history中 history.add(url); //historyIndex的数值设为history对象的长度-1 historyIndex=history.size()-1; //设置成非编辑状态 jEditorPane.setEditable(false); //重新布局 jEditorPane .revalidate();//revalidate()表示因为性能原因而被重写。 } catch(Exception ex) { //如果链接显示失败,则弹出选择对话框"无法打开搜索页" JOptionPane.showMessageDialog(WebBrowser.this,"无法打开该搜索页"); } } //url不为"",并且不以"http://"开头 else if(url.length()>0&&!url.startsWith("http://")) { url="http://"+url; try { jEditorPane.setPage(url ); history.add(url); historyIndex=history.size()-1; jEditorPane.setEditable(false); jEditorPane.revalidate(); } catch(Exception ex) { JOptionPane.showMessageDialog(WebBrowser.this,"无法打开该搜索页"); } } //没有输入url,即url为空 else if(url.length()==0) { JOptionPane.showMessageDialog(WebBrowser.this,"请输入链接地址"); } } //输入地址后按回车键 if(e.getSource()==jurl) { url=jurl.getText(); if(url.length()>0&&url.startsWith("http://")) { try { jEditorPane.setPage(url); history.add(url); historyIndex=history.size()-1; jEditorPane.setEditable(false); jEditorPane.revalidate(); jurl.setMaximumSize(jurl.getPreferredSize());//将此组件的最大大小设置为一个常量值。 } catch(Exception ex) { //如果链接显示失败,则弹出选择对话框"无法打开搜索页" JOptionPane.showMessageDialog(WebBrowser.this,"无法打开该搜索页"); } } //url不为"",并且不以"http://"开头 else if(url.length()>0&&!url.startsWith("http://")) { url="http://"+url; try { jEditorPane.setPage(url); history.add(url); historyIndex=history.size()-1; jEditorPane.setEditable(false); jEditorPane.revalidate(); } catch(Exception ex) { JOptionPane.showMessageDialog(WebBrowser.this,"无法打开该搜索页"); } } //没有输入url,即url为空 else if(url.length()==0) { JOptionPane.showMessageDialog(WebBrowser.this,"请输入链接地址"); } } //另存为... else if(e.getSource()==SaveButton||e.getSource()==saveAsItem) { url=jurl.getText().toString().trim(); if(url.length()>0&&!url.startsWith("http://")) { url="http://"+url; } if(!url.equals("")) { //保存文件 saveFile(url); } else { JOptionPane.showMessageDialog(WebBrowser.this,"请输入链接地址"); } } //退出 else if(e.getSource()==exitItem||e.getSource()==ExitButton) { System.exit(0); } //前进 else if(e.getSource()==forwardItem||e.getSource()==ForwardButton) { historyIndex++; if(historyIndex>=history.size()) historyIndex=history.size()-1; url=jurl.getText(); try { //获得history对象中本地址之前访问的地址 url=(String)history.get(historyIndex); jEditorPane.setPage(url); //将文本修改成指定字符串 jurl.setText(url.toString());//toString()表示将类型转换成一个字符串。 jEditorPane.setEditable(false); jEditorPane.revalidate(); } catch(Exception ex) {} } //后退 else if(e.getSource()==backItem||e.getSource()==BackButton) { historyIndex--; if(historyIndex<0) historyIndex=0; url=jurl.getText(); try { url=(String)history.get(historyIndex); jEditorPane.setPage(url); jurl.setText(url.toString()); jEditorPane.setEditable(false); jEditorPane.revalidate(); } catch(Exception ex) {} } //全屏 else if(e.getSource()==fullscreenItem) { boolean add_RestoreButton=true; //获得屏幕大小 Dimension size=Toolkit.getDefaultToolkit().getScreenSize(); Container content=window.getContentPane(); content.add(toolBar2,"North"); content.add(scrollPane,"Center"); //button2为单击"全屏"后的还原按钮 if(add_RestoreButton=true) { toolBar2.add(RestoreButton); } //为button2添加事件 RestoreButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { WebBrowser.this.setEnabled(true);//设置按钮是否可被激活 window.remove(toolBar2); window.remove(toolBar1); window.remove(scrollPane); window.setVisible(false);//设置窗口不可见 scrollPane.setPreferredSize(new Dimension(100,500)); getContentPane().add(scrollPane,BorderLayout.SOUTH); getContentPane().add(toolBar2,BorderLayout.CENTER); getContentPane().add(toolBar1,BorderLayout.NORTH); /*toolBar2.remove(RestoreButton);*/ pack();//布置容器,让它使用显示其内容所需的最小空间。 } }); window.setSize(size); window.setVisible(true); } //查看源文件 else if(e.getSource()==sourceItem||e.getSource()==ViewButton) { url=jurl.getText().toString().trim(); if(url.length()>0&&!url.startsWith("http://")) { url="http://"+url; } if(!url.equals("")) { //根据url,获得源代码 getHtmlSource(url); //生成显示源代码的框架对象 ViewSourceFrame vsframe=new ViewSourceFrame(htmlSource); vsframe.setBounds(0,0,800,500); vsframe.setVisible(true); } else { JOptionPane.showMessageDialog(WebBrowser.this,"请输入链接地址"); } } //刷新 else if(e.getSource()==reloadItem) { url=jurl.getText(); if(url.length()>0&&url.startsWith("http://")) { try { jEditorPane.setPage(url); jEditorPane.setEditable(false); jEditorPane.revalidate(); } catch(Exception ex) {} } else if(url.length()>0&&!url.startsWith("http://")) { url="http://"+url; try { jEditorPane.setPage(url); jEditorPane.setEditable(false); jEditorPane.revalidate(); } catch(Exception ex) {} } } } /*保存文件*/ void saveFile(final String url) { final String linesep=System.getProperty("line.separator"); chooser1.setCurrentDirectory(new File(".")); chooser1.setDialogType(JFileChooser.SAVE_DIALOG); chooser1.setDialogTitle("另存为..."); if(chooser1.showSaveDialog(this)!=JFileChooser.APPROVE_OPTION) return; this.repaint(); Thread thread=new Thread() { public void run() { try { java.net.URL source=new URL(url); InputStream in=new BufferedInputStream(source.openStream()); BufferedReader br=new BufferedReader(new InputStreamReader(in)); File fileName=chooser1.getSelectedFile(); FileWriter out=new FileWriter(fileName); BufferedWriter bw=new BufferedWriter(out); String line; while((line=br.readLine())!=null) { bw.write(line); bw.newLine(); } bw.flush(); bw.close(); out.close(); String dMessage=url+"已经被保存至"+linesep+fileName.getAbsolutePath(); String dTitle="另存为"; int dType=JOptionPane.INFORMATION_MESSAGE; JOptionPane.showMessageDialog((Component)null, dMessage,dTitle,dType); } catch(java.net.MalformedURLException muex) { JOptionPane.showMessageDialog((Component)null,muex.toString()); } catch(Exception ex) { JOptionPane.showMessageDialog((Component)null,ex.toString()); } } }; thread.start(); } /*获得源代码*/ void getHtmlSource(String url) { String linesep,htmlLine; linesep=System.getProperty("line.separator");//行与行之间的分隔符 htmlSource=""; try { java.net.URL source=new URL(url); InputStream in=new BufferedInputStream(source.openStream());//创建缓冲输入流 BufferedReader br=new BufferedReader(new InputStreamReader(in)); while((htmlLine=br.readLine())!=null) { htmlSource=htmlSource+htmlLine+linesep; } } catch(java.net.MalformedURLException muex)//抛出这一异常指示出现了错误的 URL。或者在规范字符串中找不到任何合法协议,或者无法分析字符串。 { JOptionPane.showMessageDialog(WebBrowser.this,muex.toString()); } catch(Exception e) { JOptionPane.showMessageDialog(WebBrowser.this,e.toString()); } } /*实现监听器接口hyperlinkUpdate函数*/ public void hyperlinkUpdate(HyperlinkEvent e) { try { if(e.getEventType()==HyperlinkEvent.EventType.ACTIVATED)//激活类型 jEditorPane.setPage(e.getURL()); } catch(Exception ex){/*ex.printStackTrace(System.err);*/} } public static void main(String [] args) { /*try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); } catch(Exception e){}*/ WebBrowser webBrowser=new WebBrowser(); webBrowser.pack(); webBrowser.setVisible(true); }}
//ViewSourceFrame.java
package com.jacky;import java.awt.*;
import javax.swing.*;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.util.*;
class ViewSourceFrame extends JFrame implements ActionListener{ JPanel contentPane; JPanel panel1=new JPanel(); JPanel panel2=new JPanel(); Border border1; JButton closebutton=new JButton(); JButton savebutton=new JButton(); JScrollPane jScrollPanel=new JScrollPane(); JTextArea jTextArea1 =new JTextArea(); String htmlSource; private Object SA; /*构造函数,初始化图形用户界面*/ public ViewSourceFrame(String htmlSource) { this.htmlSource=htmlSource; enableEvents(AWTEvent.WINDOW_EVENT_MASK); setSize(new Dimension(600,500)); setTitle("源代码"); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); contentPane=(JPanel)getContentPane(); contentPane.setLayout(new BorderLayout()); panel2.setLayout(new FlowLayout()); savebutton.setText("保存"); closebutton.setText("退出"); closebutton.addActionListener(this); savebutton.addActionListener(this); jScrollPanel.getViewport().add(jTextArea1,null); border1=BorderFactory.createEmptyBorder(4,4,4,4); panel1.setLayout(new BorderLayout()); panel1.setBorder(border1); panel1.add(jScrollPanel,BorderLayout.CENTER); contentPane.add(panel1,BorderLayout.CENTER); panel2.add(savebutton); panel2.add(closebutton); contentPane.add(panel2,BorderLayout.SOUTH); this.jTextArea1.setEditable(true); this.jTextArea1.setText(this.htmlSource); //设置光标的位置,将其移动到文本区第0个字符 this.jTextArea1.setCaretPosition(0); } /*实现监听器接口的actionPerformed函数*/ public void actionPerformed(ActionEvent e) { String url=""; if(e.getSource()==closebutton) { dispose(); } else if(e.getSource()==savebutton) { JFileChooser fc=new JFileChooser(); int returnVal=fc.showSaveDialog(ViewSourceFrame.this); File saveFile=fc.getSelectedFile(); try { FileWriter writeOut=new FileWriter(saveFile); writeOut.write(jTextArea1.getText()); writeOut.close(); } catch(IOException ex) { System.out.println("保存失败"); } } }}
- 网页浏览器开发
- 网页浏览器
- android简单网页浏览器的开发
- Android网页浏览器开发详解(一)
- Qt开发之webkit(编写网页浏览器)
- Android开发之网页浏览器(WebView的使用)
- Android开发之网页浏览器(WebView的使用)
- *网页浏览器主程序
- JAVA网页浏览器
- JAVA网页浏览器
- WebView(网页浏览器)
- 简易网页浏览器
- 图片网页浏览器
- 网页浏览器模块
- Browsers Series_网页浏览器
- Browsers Series_网页浏览器列表
- Browser Series_网页浏览器比较
- Dillo-一个小型网页浏览器
- java解析xml之一:使用SAX与DOM
- 在J2ME和WAP中实现电话呼叫功能
- 百家姓日文读音
- 数独的一个解法
- java解析xml之二:使用JDOM
- 网页浏览器开发
- java解析xml之三:使用domj4
- 关于软件
- java实现给图片添加水印和文字
- 孩子快抓紧妈妈的手
- ubuntu主题安装
- 四川汶川地震感言
- nchar和nvarchar的区别
- C++之父访谈