我正在尝试创建一个显示网页的JPanel。我已经到了舞台 在那里我可以阅读网页,但是当我显示页面时,它看起来都很混乱 见,见下文。
以下是源代码:
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和闪存等的方法?
答案 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浏览器。您可能想查看其来源,看看这些人是如何做到的: