在JPanel上内置浏览器

时间:2012-01-06 11:46:32

标签: java html swing browser jtextpane

我正在尝试创建一个显示网页的JPanel。我已经到了舞台 在那里我可以阅读网页,但是当我显示页面时,它看起来都很混乱 见,见下文。

enter image description here

以下是源代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;

public class Browser {
private JFrame frame;
private JPanel panelTop;
private JEditorPane editor;
private JScrollPane scroll;
private JTextField field;
private JButton button;
private URL url;

public Browser(String title) {
    initComponents();

    //set the title of the frame
    frame.setTitle(title);

    //set the default cloe op of the jframe
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //set size of frame
    frame.setSize(800,600);

    //add jpanel to north of jframe
    frame.add(BorderLayout.NORTH, panelTop);

    //add textfield and navigation button to jpanel.
    panelTop.add(field);
    panelTop.add(button);

    //add scroll pane to jframe center
    frame.add(BorderLayout.CENTER, scroll);


    //set the frame visible
    frame.setVisible(true);
}//end Browser() constructor

private void initComponents() {
    //create the JFrame
    frame = new JFrame();

    //create the JPanel used to hold the text field and button.
    panelTop = new JPanel();

    //set the url
    try {
        url = new URL("http://www.google.co.uk");
    }
    catch(MalformedURLException mue) {
        JOptionPane.showMessageDialog(null,mue);
    }

    //create the JEditorPane
    try {
        editor = new JEditorPane(url);

        //set the editor pane to false.
        editor.setEditable(false);
    }
    catch(IOException ioe) {
        JOptionPane.showMessageDialog(null,ioe);
    }

    //create the scroll pane and add the JEditorPane to it.
    scroll = new JScrollPane(editor, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
            JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

    //create the JTextField
    field = new JTextField();

    //set the JTextField text to the url.
    //we're not doing this on the event dispatch thread, so we need to use
    //SwingUtilities.
    SwingUtilities.invokeLater(new Runnable() {
       public void run() {
           field.setText(url.toString());
       }
    });

    //create the button for chanign pages.
    button = new JButton("Go");

    //add action listener to the button
    button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                editor.setPage(field.getText());
            }
            catch(IOException ioe) {
                JOptionPane.showMessageDialog(null, ioe);
            }
        }
    });
}//end initComponents()

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new Browser("Simple web browser");
        }
    });
}//end main method.
}//end Browser class

我是否缺少一些读CSS和闪存等的方法?

2 个答案:

答案 0 :(得分:6)

仅仅因为JEditorPane渲染旧的(3.2的部分)HTML而简单的CSS不会使它成为浏览器。它仅适用于您控制的内容。

  

我是否缺少一些读CSS的方法..

它支持简单的样式。

  

.. flash等?

默认HTML editor kit不支持。

支持新的HTML元素可以添加到编辑器工具包中,但是您需要提供呈现Flash,.. applet等的组件。

答案 1 :(得分:4)

嗯,是的。通常,您使用一些Java http客户端(在这种情况下,JEditorPane能够从URL获取Html响应)从HTTP地址获取响应,您将获得文本,但没有执行Javascript代码,也没有RIA小部件输出(如Flash,Silverlight等)。现在对于Javascript问题,您可以使用HtmlUnit(http://htmlunit.sourceforge.net/)来执行Javascript,但是您仍然对Flash小部件运气不足。

但是,您尝试在此处显示的Google页面通常没有任何Flash或类似内容。只需使用HTMLUnit从网址获取html(加上执行的javascript),然后显示即可。您可能需要进一步手动解析该HTML以微调Swing GUI。

Lobo是一个开源Java Web浏览器。您可能想查看其来源,看看这些人是如何做到的:

http://lobobrowser.org/sourcecode.jsp