首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

怎样用Java制作一个简单浏览器解决方法

2012-03-20 
怎样用Java制作一个简单浏览器怎样用Java制作一个简单浏览器package com.swtimportjava.io.IOExceptioni

怎样用Java制作一个简单浏览器
怎样用Java制作一个简单浏览器

package com.swt;

import java.io.IOException; 
import java.net.URL; 
import javax.swing.*; 
import javax.swing.text.Document; 
import javax.swing.text.JTextComponent; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.event.*; 

public class HtmlBrowser extends JFrame{ 
  JTextField jtfAddress;
  JButton jbGo;
  JTextPane jtpShow;
  JLabel jlInfo;
   
  public HtmlBrowser()
  {
  super("我的浏览器");
  jtfAddress=new JTextField(20);
  jbGo=new JButton("转到");
  jtpShow=new JTextPane();
  jlInfo=new JLabel();
   
  JPanel panel=new JPanel();
  panel.add(new JLabel("地址"));
  panel.add(jtfAddress);
  panel.add(jbGo);
  JScrollPane jsp=new JScrollPane(jtpShow);
  Container container=getContentPane();
  container.add(panel,BorderLayout.NORTH);
  container.add(jsp,BorderLayout.CENTER);
  container.add(jlInfo,BorderLayout.SOUTH);
  jbGo.addActionListener(new ShowHTMLListener());
  jtfAddress.addActionListener(new ShowHTMLListener());
   
  setSize(400,320);
  setVisible(true);
  setLocation(400,260);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
  class ShowHTMLListener implements ActionListener
  {
  public void actionPerformed(ActionEvent event)
  {
  try{
  jlInfo.setText("正在连接...");
  URL address=new URL(jtfAddress.getText());
  jtpShow.setPage(address);
  jlInfo.setText("完成");
  }
  catch(Exception ex)
  {
  jlInfo.setText("连接出错");
  ex.printStackTrace();
  }
  }
  }
  public static void main(String[] args)
  {
  new HtmlBrowser();
   
  }
   
   
   
   
  }

网页错乱呢

[解决办法]
“不要重复发明轮子”,SWING组件里面有个JEditorPane可以支持许多的HTML的标签,楼主可以研究研究用这个加上java.net.URL类一起做个简单的浏览器
[解决办法]
可以使用 javafx2 beta for windows 提供的 WebView/WebEngine
基于 webkit
[解决办法]

Java code
import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import java.io.File;import java.io.IOException;import java.net.MalformedURLException;import java.net.URL;import java.util.ArrayList;import javax.swing.JButton;import javax.swing.JEditorPane;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JScrollPane;import javax.swing.JTextField;import javax.swing.JToolBar;import javax.swing.event.HyperlinkEvent;import javax.swing.event.HyperlinkListener;import javax.swing.filechooser.FileFilter;/** * 实现一个简单的Web浏览器,支持HTML和HTM页面的显示。使用了JEditorPane组件 **/public class WebBrowser extends JFrame implements HyperlinkListener,        PropertyChangeListener {        /**下面是使用的Swing组件**/        // 显示HTML的面板    JEditorPane textPane;     // 最底下的状态栏    JLabel messageLine;     // 网址URL输入栏    JTextField urlField;    // 文件选择器,打开本地文件时用    JFileChooser fileChooser;        // 后退和前进 按钮    JButton backButton;    JButton forwardButton;    // 保存历史记录的列表    java.util.List history = new ArrayList();     // 当前页面的在历史记录列表中位置    int currentHistoryPage = -1;      // 当历史记录超过MAX_HISTORY时,清除旧的历史    public static final int MAX_HISTORY = 50;    // 当前已经打开的浏览器窗口数    static int numBrowserWindows = 0;    // 标识当所有浏览器窗口都被关闭时,是否退出应用程序    static boolean exitWhenLastWindowClosed = false;    // 默认的主页    String home = "http://www.google.com";    /**     * 构造函数     */    public WebBrowser() {        super("WebBrowser");         // 新建显示HTML的面板,并设置它不可编辑        textPane = new JEditorPane();         textPane.setEditable(false);         // 注册事件处理器,用于超连接事件。        textPane.addHyperlinkListener(this);        // 注册事件处理器,用于处理属性改变事件。当页面加载结束时,触发该事件        textPane.addPropertyChangeListener(this);        // 将HTML显示面板放入主窗口,居中显示        this.getContentPane().add(new JScrollPane(textPane),                                  BorderLayout.CENTER);        // 创建状态栏标签,并放在主窗口底部        messageLine = new JLabel(" ");        this.getContentPane().add(messageLine, BorderLayout.SOUTH);        // 初始化菜单和工具栏        this.initMenu();        this.initToolbar();                // 将当前打开窗口数增加1        WebBrowser.numBrowserWindows++;                // 当关闭窗口时,调用close方法处理        this.addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e) {                close();            }        });    }        /**     * 初始化菜单栏     */    private void initMenu(){                // 文件菜单,下面有四个菜单项:新建、打开、关闭窗口、退出        JMenu fileMenu = new JMenu("文件");        fileMenu.setMnemonic('F');        JMenuItem newMenuItem = new JMenuItem("新建");        newMenuItem.setMnemonic('N');        // 当“新建”时打开一个浏览器窗口        newMenuItem.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                newBrowser();            }        });                JMenuItem openMenuItem = new JMenuItem("打开");        openMenuItem.setMnemonic('O');        // 当“打开”是打开文件选择器,选择待打开的文件        openMenuItem.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                openLocalPage();            }        });                JMenuItem closeMenuItem = new JMenuItem("关闭窗口");        closeMenuItem.setMnemonic('C');        // 当“关闭窗口”时关闭当前窗口        closeMenuItem.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                close();            }        });                JMenuItem exitMenuItem = new JMenuItem("退出");        exitMenuItem.setMnemonic('E');        // 当“退出”时退出应用程序        exitMenuItem.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                exit();            }        });                fileMenu.add(newMenuItem);        fileMenu.add(openMenuItem);        fileMenu.add(closeMenuItem);        fileMenu.add(exitMenuItem);                //帮助菜单,就一个菜单项:关于        JMenu helpMenu = new JMenu("帮助");        fileMenu.setMnemonic('H');        JMenuItem aboutMenuItem = new JMenuItem("关于");        aboutMenuItem.setMnemonic('A');        helpMenu.add(aboutMenuItem);                JMenuBar menuBar = new JMenuBar();        menuBar.add(fileMenu);        menuBar.add(helpMenu);                // 设置菜单栏到主窗口        this.setJMenuBar(menuBar);    }        /**     * 初始化工具栏     */    private void initToolbar(){        // 后退按钮,退到前一页面。初始情况下该按钮不可用        backButton = new JButton("后退");        backButton.setEnabled(false);        backButton.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                back();            }        });                // 前进按钮,进到前一页面。初始情况下该按钮不可用        forwardButton = new JButton("前进");        forwardButton.setEnabled(false);        forwardButton.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                forward();            }        });                // 前进按钮,进到前一页面。初始情况下该按钮不可用        JButton refreshButton = new JButton("刷新");        refreshButton.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                reload();            }        });                // 主页按钮,打开主页        JButton homeButton = new JButton("主页");        homeButton.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                home();            }        });                JToolBar toolbar = new JToolBar();        toolbar.add(backButton);        toolbar.add(forwardButton);        toolbar.add(refreshButton);        toolbar.add(homeButton);        // 输入网址的文本框        urlField = new JTextField();        // 当用户输入网址、按下回车键时,触发该事件        urlField.addActionListener(new ActionListener() {                public void actionPerformed(ActionEvent e) {                    displayPage(urlField.getText());                }            });        // 地址标签        toolbar.add(new JLabel("         地址:"));        toolbar.add(urlField);        // 将工具栏放在主窗口的北部        this.getContentPane().add(toolbar, BorderLayout.NORTH);    }    /**     * 设置浏览器是否在所有窗口都关闭时退出     * @param b     */    public static void setExitWhenLastWindowClosed(boolean b) {        exitWhenLastWindowClosed = b;    }    /**     * 设置主页     * @param home    新主页     */    public void setHome(String home) {        this.home = home;    }    /**     * 获取主页     */    public String getHome() {        return home;    }    /**     * 访问网址URL     */    private boolean visit(URL url) {        try {            String href = url.toString();            // 启动动画,当网页被加载完成时,触发propertyChanged事件,动画停止。            startAnimation("加载 " + href + "...");                        // 设置显示HTML面板的page属性为待访问的URL,            // 在这个方法里,将打开URL,将URL的流显示在textPane中。            // 当完全打开后,该方法才结束。            textPane.setPage(url);                         // 页面打开后,将浏览器窗口的标题设为URL            this.setTitle(href);              // 网址输入框的内容也设置为URL            urlField.setText(href);             return true;        } catch (IOException ex) {             // 停止动画            stopAnimation();            // 状态栏中显示错误信息            messageLine.setText("不能打开页面:" + ex.getMessage());            return false;        }    }    /**     * 浏览器打开URL指定的页面,如果成功,将URL放入历史列表中     */    public void displayPage(URL url) {        // 尝试访问页面        if (visit(url)) {             // 如果成功,则将URL放入历史列表中。            history.add(url);             int numentries = history.size();            if (numentries > MAX_HISTORY+10) {                 history = history.subList(numentries-MAX_HISTORY, numentries);                numentries = MAX_HISTORY;            }            // 将当前页面下标置为numentries-1            currentHistoryPage = numentries - 1;            // 如果当前页面不是第一个页面,则可以后退,允许点击后退按钮。            if (currentHistoryPage > 0){                backButton.setEnabled(true);            }        }    }    /**     * 浏览器打开字符串指定的页面     * @param href    网址     */    public void displayPage(String href) {        try {            // 默认为HTTP协议            if (!href.startsWith("http://")){                href = "http://" + href;            }            displayPage(new URL(href));        }        catch (MalformedURLException ex) {            messageLine.setText("错误的网址: " + href);        }    } 

热点排行