2012-01-06 98 views
3

我試圖創建一個顯示網頁的JPanel。我已經到達 的階段,我可以在那裏閱讀網頁,但是當我顯示該頁面時,它看起來全是混亂 了,見下文。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安德閃光燈等?

+1

我幾乎可以肯定的JEditorPane是不是能夠處理最先進的網頁內容類型。 – mcfinnigan 2012-01-06 11:52:52

回答

6

僅僅因爲JEditorPane呈現舊的(3.2的一部分)HTML和簡單的CSS不會使它成爲瀏覽器。它僅適用於您控制的內容。

有沒有一些方法,我缺少讀取CSS ..

它支持簡單的款式。

.. flash等?

不支持默認HTML editor kit

支持新的HTML元素可以將添加到編輯器工具包中,但您需要提供呈現Flash,..applet等任何組件。

+0

有沒有其他方法可以使用? – 2012-01-06 11:53:33

+1

嘗試http://djproject.sourceforge.net/ns/index.html – 2012-01-06 11:55:54

4

嗯,是的。通常你會使用一些Java http客戶端(在這種情況下,JEditorPane能夠從url獲得Html響應)來獲取來自HTTP地址的響應,您將獲得文本,但不執行Javascript代碼,也沒有RIA小部件輸出(如Flash,Silverlight等)。現在對於Javascript問題,您可以使用HtmlUnit(http://htmlunit.sourceforge.net/)來執行Javascript,但對於Flash小部件,您仍然失敗。

但是,您嘗試在此處顯示的Google頁面通常沒有任何Flash或類似的內容。只需使用HTMLUnit從url中獲取html(加上執行的javascript),並顯示它。您可能需要進一步手動解析該HTML,以便微調Swing GUI。

Lobo是一個開源的Java Web瀏覽器。你可能想籤的來源,看看那些人是怎麼做的:

http://lobobrowser.org/sourcecode.jsp