2014-10-29 118 views
0

我正在準備計算機展覽的一個項目,我正在爲它準備網絡瀏覽器。 它運行完美,但是當我打開一個網站如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(); 
    } 
} 
} 
+0

更換'display.setEnabled(假);'和'display.setEditable(假);'第一。 – 2014-10-29 14:41:57

回答

1

不能使用的JEditorPane正確查看HTML頁面,因爲它有侷限性。 你可以使用editorpane只爲基本的HTML。它不提供良好的CSS支持,它不支持JavaScript。如果你想正確顯示一個網頁,你可以使用一個很好的HTML CSS和JS支持庫。 http://lobobrowser.org/java-browser.jsp,你也可以使用JavaFX WebView

更新.....

這個例子中,你如何使用JavaFX的web視圖中的Swing應用程序來查看網頁正常。我只能做最小的改動你的代碼。

完整代碼

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

它看起來怎麼樣?

enter image description here

+0

可以請告訴我以什麼方式它可以幫助我解決我的問題.. – Priyank 2014-10-29 15:12:23

+1

@Priyank在您的瀏覽器中禁用javascript和css並訪問頁面。您將看到非常醜陋的page.same問題here.jeditorpane不會正確呈現css 。它不提供良好的CSS環境。您可以使用支持css和javascript的lobo瀏覽器 – 2014-10-29 15:14:53

+0

感謝您的幫助,如果我需要更多的信息,那麼我如何連接到您或我可以在這裏只給我評論我的問題? ? – Priyank 2014-10-29 15:25:32