繁体   English   中英

无法打开网站

[英]can't open websites in swing

我正在准备一个用于计算机展览的项目,并且正在为其准备Web浏览器。 它运行完美,但是当我打开google这样的网站时,看不到它。 出现一个带有Google徽标和一些文本的蓝屏。

我的代码是:

import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.*;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.html.*;

public class browser
extends JFrame
implements HyperlinkListener{
    URL pageURL;
    private static final long serialVersionUID = 1630568393141656837L;
    JPanel panel;
    JButton back,forward,go;
    JTextField website;
    JEditorPane display;
    JScrollPane sp;
public void setPanel()
{
    panel=new JPanel();
    back=new JButton("<<");
    forward=new JButton(">>");
    go=new JButton("GO");
    panel.add(back);
    panel.add(forward);
    website=new JTextField("http://",10);
    panel.add(website);
    panel.add(go);
    sp=new JScrollPane();

    display=new JEditorPane();
    display.setEditable(false);
    display.setContentType("text/html");
    sp.add(display);
    go.addActionListener(new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent arg0) {
            // TODO Auto-generated method stub
            browse();
        }

    });
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new BorderLayout());
    add(panel,BorderLayout.NORTH);
    add(display,BorderLayout.CENTER);
    setSize(900,500);
    setVisible(true);
}
protected void browse() {
    String page=website.getText();
    try {
        pageURL=new URL(page);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    try {
        display.setPage(pageURL);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
public static void main(String arg[])
{
    browser br=new browser();
    br.setPanel();
}
@Override
public void hyperlinkUpdate(HyperlinkEvent arg0) {
    // TODO Auto-generated method stub
    HyperlinkEvent.EventType event=arg0.getEventType();
    if(event==HyperlinkEvent.EventType.ACTIVATED);
    {
        browse();
    }
}
}

您不能使用jeditorpane正确查看html页面,因为它具有局限性。 您只能对基本html使用editorpane。它不提供良好的css支持,也不支持javascript。如果要正确显示网页,则可以使用良好的html css和js支持库。看看lobo浏览器http ://lobobrowser.org/java-browser.jsp ,您也可以使用JavaFX WebView

更新.....

这是一个示例,说明如何在swing应用程序中使用javafx webView正确查看网页。i仅对代码进行了最小的更改。

完整的代码

import com.sun.javafx.application.PlatformImpl;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.web.WebView;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;

public class browser extends JFrame implements HyperlinkListener {

    URL pageURL;
    private static final long serialVersionUID = 1630568393141656837L;
    JPanel panel;
    JButton back, forward, go;
    JTextField website;
    JScrollPane sp;
    private JFXPanel display;

    WebView webComponent;

    public void setPanel() {
        panel = new JPanel();
        back = new JButton("<<");
        forward = new JButton(">>");
        go = new JButton("GO");
        panel.add(back);
        panel.add(forward);
        website = new JTextField("http://", 10);
        panel.add(website);
        panel.add(go);

        display = new JFXPanel();
        createScene();

        go.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Platform.runLater(new Runnable() {
                    @Override
                    public void run() {
                        browse();
                    }
                });

            }
        });

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
        add(panel, BorderLayout.NORTH);
        add(display, BorderLayout.CENTER);
        setSize(900, 500);
        setVisible(true);
    }

    private void createScene() {
        PlatformImpl.startup(new Runnable() {
            @Override
            public void run() {

                BorderPane borderPane = new BorderPane();
                webComponent = new WebView();
                borderPane.setCenter(webComponent);
                Scene scene = new Scene(borderPane, 450, 450);
                display.setScene(scene);

            }
        });
    }

    protected void browse() {
        String url = website.getText();
        if (url != null && url.length() > 0) {
            webComponent.getEngine().load(url);
        }
    }

    public static void main(String arg[]) {
        browser br = new browser();
        br.setPanel();
    }

    @Override
    public void hyperlinkUpdate(HyperlinkEvent arg0) {
        HyperlinkEvent.EventType event = arg0.getEventType();
        if (event == HyperlinkEvent.EventType.ACTIVATED);
        {
            browse();
        }
    }
}

看起来像...

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM