首页 > 学院 > 开发设计 > 正文

简易网页浏览器

2019-11-08 02:02:23
字体:
来源:转载
供稿:网友
package WebBrowser;/* * 网页浏览主程序 * webBrowser.java */import java.awt.*;import java.awt.Component;import java.awt.Container;import java.awt.Dimension;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import java.io.*;import java.net.URL;import java.util.ArrayList;import javax.swing.*;import javax.swing.event.HyperlinkEvent;import javax.swing.event.HyperlinkListener;public class WebBrowser extends JFrame implements HyperlinkListener,ActionListener { //建立工具栏用来显示地址 JToolBar bar=new JToolBar(); //建立网页显示页面 JTextField jurl=new JTextField(60); JEditorPane jEditorPanel=new JEditorPane(); JScrollPane scrollpane=new JScrollPane(jEditorPanel); JFileChooser chooser =new JFileChooser(); JFileChooser chooser1 =new JFileChooser(); String htmlSource; JWindow window=new JWindow(WebBrowser.this); JButton button2=new JButton("窗口还原"); Toolkit toolkit=Toolkit.getDefaultToolkit(); //建立菜单栏 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 backItem=new JMenuItem("后退"); JMenuItem forwardItem=new JMenuItem("前进"); JMenu viewMenu=new JMenu("视图(V)"); JMenuItem fullscreenItem=new JMenuItem("全屏(U)"); JMenuItem sourceItem=new JMenuItem("查看源码(C)"); JMenuItem reloadItem=new JMenuItem("刷新(R)"); //建立工具栏 JToolBar toolBar=new JToolBar(); //建立工具栏中的按钮 JButton picSave=new JButton("另存为"); JButton picBack=new JButton("后退"); JButton picForward=new JButton("前进"); JButton picView=new JButton("查看源码"); JButton picExit=new JButton("退出"); JLabel label=new JLabel("地址"); JButton button=new JButton("转向"); Box adress=Box.createHorizontalBox(); //ArrayList对象 用来存放历史地址 PRivate ArrayList history=new ArrayList(); //整型变量 表示历史地址的访问顺序 private int historyIndex; /* * * 构造函数 * 初始化图形用户界面 */ public WebBrowser(){ setTitle("网页浏览器"); setResizable(false); setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); //为jEditorPanel 添加事件侦听 jEditorPanel.addHyperlinkListener(this); //为组件fileMenu添加热键'F' fileMenu.setMnemonic('F'); saveAsItem.setMnemonic('S'); //为另存为组件设置快捷键为ctrl+s saveAsItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); exitItem.setMnemonic('Q'); exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_MASK)); //将菜单项saveAsItem加入到菜单组fileMenu中 fileMenu.add(saveAsItem); //在菜单项中添加隔离线 fileMenu.addSeparator(); fileMenu.add(exitItem); 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)); editMenu.setMnemonic('E'); editMenu.add(backItem); editMenu.add(forwardItem); viewMenu.setMnemonic('V'); fullscreenItem.setMnemonic('U'); fullscreenItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,InputEvent.CTRL_MASK)); 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)); Container contentPane=getContentPane(); //设置大小 scrollpane.setPreferredSize(new Dimension(100,500)); contentPane.add(scrollpane,BorderLayout.SOUTH); //在工具栏中添加按钮事件 toolBar.add(picSave); toolBar.addSeparator(); toolBar.add(picBack); toolBar.add(picForward); toolBar.addSeparator(); toolBar.add(picView); toolBar.addSeparator(); toolBar.add(picExit); contentPane.add(bar,BorderLayout.CENTER); contentPane.add(toolBar,BorderLayout.NORTH); viewMenu.add(fullscreenItem); viewMenu.add(sourceItem); viewMenu.addSeparator(); viewMenu.add(reloadItem); jMenuBar1.add(fileMenu); jMenuBar1.add(editMenu); jMenuBar1.add(viewMenu); setJMenuBar(jMenuBar1); adress.add(label); adress.add(jurl); adress.add(button); bar.add(adress); //为组件添加事件监听 saveAsItem.addActionListener(this); picSave.addActionListener(this); exitItem.addActionListener(this); picExit.addActionListener(this); backItem.addActionListener(this); picBack.addActionListener(this); forwardItem.addActionListener(this); picForward.addActionListener(this); fullscreenItem.addActionListener(this); sourceItem.addActionListener(this); picView.addActionListener(this); reloadItem.addActionListener(this); button.addActionListener(this); jurl.addActionListener(this); } /* * 实现监听接口的ACTIONpERFORMED函数 */ public void actionPerformed(ActionEvent e){ String url=""; //点击转向按钮 if(e.getSource()==button){ //获得地址栏的内容 url=jurl.getText(); //url不为"",并且以"http://"开头 if(url.length()>0&&url.startsWith("http://")){ try{ //JEditorPane组件显示url的内容链接 jEditorPanel.setPage(url); //将url的内容添加到ArrayList的对象history中 history.add(url); //historyIndex的数值设为history的长度-1 historyIndex=history.size()-1; //设置成非编辑状态jEditorPanel.setEditable(false); //重新布局 jEditorPanel.revalidate(); } catch(Exception ex){ //如果链接显示失败,则弹出选择对话框“无法打开搜索页” JOptionPane.showMessageDialog(WebBrowser.this,"无法打开搜索页","网页浏览器",JOptionPane.ERROR_MESSAGE); } } //url不为"",并且不以“http://”kaitou else if(url.length()>0&&!url.startsWith("http://")){ //在url前面添加"http://" url="http://"+url; try{ jEditorPanel.setPage(url); history.add(url); historyIndex=history.size()-1; //设置成非编辑状态 jEditorPanel.revalidate(); }catch(Exception ex){ JOptionPane.showMessageDialog(WebBrowser.this, "无法打开该网页","网页浏览器",JOptionPane.ERROR_MESSAGE); } } //没有输入url 即url为空 else if(url.length()==0){ JOptionPane.showMessageDialog(WebBrowser.this,"请输入链接地址","网页浏览器",JOptionPane.ERROR_MESSAGE); } } //输入地址后按回车 else if(e.getSource()==jurl){ url=jurl.getText(); if(url.length()>0&&url.startsWith("http://")){ try{ jEditorPanel.setPage(url); history.add(url); historyIndex=history.size()-1; //设置成非编辑状态 jEditorPanel.revalidate(); jurl.setMaximumSize(jurl.getPreferredSize()); }catch(Exception ex){ JOptionPane.showMessageDialog(WebBrowser.this, "无法打开该搜索页","网页浏览器",JOptionPane.ERROR_MESSAGE); } } else if(url.length()>0&&!url.startsWith("http://")){ url="http://"+url; try{ jEditorPanel.setPage(url); history.add(url); historyIndex=history.size()-1; //设置成非编辑状态 jEditorPanel.revalidate(); }catch(Exception ex){ JOptionPane.showMessageDialog(WebBrowser.this, "无法打开该搜索页","网页浏览器",JOptionPane.ERROR_MESSAGE); } } else if(url.length()==0){ JOptionPane.showMessageDialog(WebBrowser.this, "请输入连接地址","网页浏览器",JOptionPane.ERROR_MESSAGE); } } //另存为... else if(e.getSource()==picSave||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, "请输入链接地址","网页浏览器",JOptionPane.ERROR_MESSAGE); } } //退出 else if(e.getSource()==exitItem||e.getSource()==picExit){ System.exit(0); } //后退 else if(e.getSource()==backItem||e.getSource()==picBack){ historyIndex--; if(historyIndex<0) historyIndex=0; url=jurl.getText(); try{ //获得history对象中本地地址之前的访问地址 url=(String)history.get(historyIndex); jEditorPanel.setPage(url); jurl.setText(url.toString()); //设置成非编辑状态 jEditorPanel.revalidate(); }catch(Exception ex){ } } //前进 else if(e.getSource()==forwardItem||e.getSource()==picForward){ historyIndex++; if(historyIndex<=history.size()) historyIndex=history.size()-1; url=jurl.getText(); try{ //获得history对象中本地地址之后的内容 url=(String)history.get(historyIndex); jEditorPanel.setPage(url); jurl.setText(url.toString()); //设置成为非编辑状态 jEditorPanel.revalidate(); }catch(Exception ex){ } } //全屏 else if(e.getSource()==fullscreenItem){ boolean add_button2=true; //获得屏幕大小 Dimension size=Toolkit.getDefaultToolkit().getScreenSize(); Container content=window.getContentPane(); content.add(bar,"North"); content.add(scrollpane,"Center"); //button2为单击全屏后的还原按钮 if(add_button2==true){ bar.add(button2); } //为button2添加事件 button2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent evt){ WebBrowser.this.setEnabled(true); window.remove(bar); window.remove(toolBar); window.remove(scrollpane); window.setVisible(false); scrollpane.setPreferredSize(new Dimension(100,500)); getContentPane().add(scrollpane,BorderLayout.SOUTH); getContentPane().add(bar,BorderLayout.CENTER); getContentPane().add(toolBar,BorderLayout.NORTH); bar.remove(button2); pack(); } }); window.setSize(size); window.setVisible(true); } //查看源文件 else if(e.getSource()==sourceItem||e.getSource()==picView){ 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, "请输入链接地址","网页浏览器",JOptionPane.ERROR_MESSAGE); } } //刷新 else if(e.getSource()==reloadItem){ url=jurl.getText(); if(url.length()>0&&url.startsWith("http://")){ try{ jEditorPanel.setPage(url); //设置为非编辑状态 jEditorPanel.revalidate(); }catch(Exception ex){ } } else if(url.length()>0&&url.startsWith("http://")){ url="http://"+url; try{ jEditorPanel.setPage(url); //设置成非编辑状态 jEditorPanel.revalidate(); }catch(Exception ex){ } } } } /* * 保存文件 */ void saveFile(final String url){ final String linesep=System.getProperty("line.separator"); chooser.setCurrentDirectory(new File(".")); chooser.setDialogType(JFileChooser.SAVE_DIALOG); chooser.setDialogTitle("另存为..."); if(chooser.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=chooser.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(),"网页浏览器",JOptionPane.ERROR_MESSAGE); }catch(Exception e){ JOptionPane.showMessageDialog((Component)null,e.toString(),"网页浏览器",JOptionPane.ERROR_MESSAGE); } } }; 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){ JOptionPane.showMessageDialog(WebBrowser.this,muex.toString(),"网页浏览器",JOptionPane.ERROR_MESSAGE); }catch(Exception e){ JOptionPane.showMessageDialog(WebBrowser.this, e.toString(),"网页浏览器",JOptionPane.ERROR_MESSAGE); } } /* * 实现监听接口的hyperlinkupdate函数 */ public void hyperlinkUpdate(HyperlinkEvent e){ try{ if(e.getEventType()==HyperlinkEvent.EventType.ACTIVATED) jEditorPanel.setPage(e.getURL()); }catch(Exception ex){ ex.printStackTrace(System.err); } } /* * 生成一个IE对象 */ public static void main(String[] args) { // TODO Auto-generated method stub try{ UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); }catch(Exception e){ } WebBrowser webBrowser=new WebBrowser(); webBrowser.pack(); webBrowser.setVisible(true); }}package WebBrowser;import java.awt.AWTEvent;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.*;import java.io.IOException;import javax.swing.*;import javax.swing.JButton;import javax.swing.JFileChooser;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.WindowConstants;import javax.swing.border.Border;/* * 源代码框架 */ 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; /* * 构造函数,初始图形用户界面 */ 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); //设置光标的位置,将其移动到文本区第o个字符 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("保存失败"); } } }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表