Priyank
Priyank

Reputation: 83

can't open websites in swing

I am preparing a project for computer exhibition and I am preparing web browser for it. It runs perfectly, but when I open a website such as google, it is not visible clearly. A blue screen appears with the logo of google and with some text.

My code is:

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();
    }
}
}

Upvotes: 0

Views: 850

Answers (1)

Madhawa Priyashantha
Madhawa Priyashantha

Reputation: 9872

you can't use jeditorpane to view html page correctly since it has limitation. you can use editorpane only for basic html .it does not provide good css support and it doesn't support javascript .if you want to show a webpage correctly you could use a good html css and js supporting library .take a look lobo browser http://lobobrowser.org/java-browser.jsp and also you can use JavaFX WebView

update.....

this is example how you can use javafx webView in your swing application to view a webpage properly .i only have make minimal changes to your code .

complete code

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();
        }
    }
}

how it look like ...

enter image description here

Upvotes: 1

Related Questions