Встроенный браузер на JPanel - PullRequest
3 голосов
/ 06 января 2012

Я пытаюсь создать 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 и flash и т. Д.?

Ответы [ 2 ]

6 голосов
/ 06 января 2012

Тот факт, что JEditorPane отображает старый (части 3.2) HTML и простой CSS, не делает его браузером. Подходит только для контента, которым вы управляете.

Есть ли какие-то методы, которые мне не хватает, которые читают CSS ..

Он поддерживает простые стили.

.. вспышка и т. Д.

Не поддерживается в стандартном комплекте редактора HTML .

Поддержка новых элементов HTML можно добавить в комплект редактора, но вам необходимо предоставить компонент, который отображает Flash, ..applet, что угодно.

4 голосов
/ 06 января 2012

Ну да. Обычно, когда вы используете какой-нибудь Java-HTTP-клиент (в данном случае способность JEditorPane получать Html-ответ от URL-адреса) для получения ответа от HTTP-адреса, вы получите текст, но без выполнения кода Javascript, а также без виджетов RIA вывод (например, Flash, Silverlight и т. д.). Теперь для проблемы Javascript вы можете использовать HtmlUnit (http://htmlunit.sourceforge.net/), который выполняет Javascript, но вам все еще не повезло с виджетами Flash.

Однако страница Google, которую вы пытаетесь отобразить здесь, обычно не имеет Flash или чего-то подобного. Просто используйте HTMLUnit, чтобы получить html (плюс исполняемый javascript) из URL и отобразить его. Вам, возможно, потребуется дополнительно вручную проанализировать этот HTML-код для тонкой настройки вашего Swing GUI.

Lobo - это веб-браузер Java с открытым исходным кодом. Вы можете проверить его источники и посмотреть, как эти парни сделали это:

http://lobobrowser.org/sourcecode.jsp

...