⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webbrowser.java

📁 用java实现的一个简易的网页浏览器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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.*;
public class WebBrowser extends JFrame implements HyperlinkListener,ActionListener{
        
    /**
     * Creates a new instance of <code>WebBrowser</code>.
     */
    //.......
    

    
    //......... 
     
   //建立主件
   
   JToolBar bar =new JToolBar();//工具栏
   
   
   JTextField jurl=new JTextField(60);//地址栏
   
   JEditorPane2 jEditorPane1=new JEditorPane2();//网页框
   JScrollPane scrollPane=new JScrollPane(jEditorPane1);//滚动条
   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("另存为(S)");
   JMenuItem exitItem=new JMenuItem("退出(E)");
   
  
   JMenu editMenu=new JMenu("编辑(E)");//建立菜单组
   JMenuItem backItem=new JMenuItem("后退(Z)");
   JMenuItem forwardItem=new JMenuItem("前进(P)");
   
   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();  //创建一个从左到右显示其组件
   Box adressSource=Box.createHorizontalBox();
   private ArrayList history=new ArrayList();
   private int historyIndex;
   
   
   
   
   
    public WebBrowser() {
     
     
     setTitle("网页浏览器");
     setResizable(true);//设置此 frame 是否可由用户调整大小
     
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
     jEditorPane1.addHyperlinkListener(this);//事件监听
     
     
   
     fileMenu.setMnemonic('F');
     saveAsItem.setMnemonic('S');
        saveAsItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
     exitItem.setMnemonic('P');
     exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_MASK));
     //设置热键
     
     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.addSeparator();
     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.addSeparator();
     toolBar.add(picForward);
     toolBar.addSeparator();
     toolBar.add(picView);
     toolBar.addSeparator();
     toolBar.add(picExit);
     toolBar.addSeparator();
     toolBar.add(picExit);
     toolBar.addSeparator();
     
     toolBar.add(adressSource);
     
     contentPane.add(bar,BorderLayout.CENTER);
     contentPane.add(toolBar,BorderLayout.NORTH);
     
     viewMenu.add(fullscreenItem);
     viewMenu.addSeparator();
     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);
     
    
     
   
     
     
    }
   //.................. 
    
    //.....
    
     public void actionPerformed(ActionEvent e)
     {
     
     String url="";
     if(e.getSource()==button){ //按down.................................................
      url=jurl.getText();
      if(url.length()>0&&url.startsWith("http://")){
       try{
        jEditorPane1.setPage(url);
        history.add(url);
        historyIndex=history.size()-1;// 返回此列表中的元素数
        jEditorPane1.setEditable(false);
        jEditorPane1.revalidate();
        }
        catch(Exception ex){
         JOptionPane.showMessageDialog(WebBrowser.this,"不能打开网页","网页浏览器",JOptionPane.ERROR_MESSAGE);
         }
       }
       else if(url.length()>0&&!url.startsWith("http://")){
        url="http://"+url;
        try{
         jEditorPane1.setPage(url);
            history.add(url);
            historyIndex=history.size()-1;// 返回此列表中的元素数
            jEditorPane1.setEditable(false);
            jEditorPane1.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()==jurl){
          url=jurl.getText();
          
          if(url.length()>0&&url.startsWith("http://")){
       try{
        jEditorPane1.setPage(url);
        history.add(url);
        historyIndex=history.size()-1;// 返回此列表中的元素数
        jEditorPane1.setEditable(false);
        jEditorPane1.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{
         jEditorPane1.setPage(url);
            history.add(url);
            historyIndex=history.size()-1;// 返回此列表中的元素数
            jEditorPane1.setEditable(false);
            jEditorPane1.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().trim();//去掉字符串头和尾的空格
           if(url.length()>0&&!url.startsWith("http://")){
             url="http://"+url;
           
            }
            if(!url.equals("")){
              saveFile(url);
             }
             else{
               JOptionPane.showMessageDialog(WebBrowser.this,"请输入链接地址","网页浏览器",JOptionPane.ERROR_MESSAGE);
        
              }
        } 
       
     //exit...
     else if(e.getSource()==exitItem||e.getSource()==picExit){
      System.exit(0);
      }
      
     //back.
     else if(e.getSource()==backItem||e.getSource()==picBack){
      
       historyIndex--;
       if(historyIndex<0)
        historyIndex=0;
        url=jurl.getText();
        try{
         url=(String)history.get(historyIndex);
         jEditorPane1.setPage(url);
         jurl.setText(url.toString());
         jEditorPane1.setEditable(false);
         jEditorPane1.revalidate();
         /**
          *public void revalidate()支持推迟的自动布局。 
调用 invalidate 并将此组件的 validateRoot 添加到需要验证的组件列表中。调度完当前所有未完成的事件后进行验证。换句话说,调用此方法后,将验证浏览此组件的包含层次结构时找到的第一个 validateRoot(如果有)。默认情况下,JRootPane、JScrollPane 和 JTextField 从 isValidateRoot 返回 true。 
当属性值更改,从而影响此组件的大小、位置或内部布局时,就对此组件自动调用此方法。这种自动更新不同于 AWT,因为通常来说,程序不再需要调用 validate 来获得要更新的 GUI 的内容。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -