swing 浏览器

来源:互联网 发布:网络信贷理财平台 编辑:程序博客网 时间:2024/05/22 09:51
import javafx.application.Platform;import javafx.beans.value.ChangeListener;import javafx.beans.value.ObservableValue;import javafx.embed.swing.JFXPanel;import javafx.event.EventHandler;import javafx.scene.Scene;import javafx.scene.web.WebEngine;import javafx.scene.web.WebEvent;import javafx.scene.web.WebView; import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.net.MalformedURLException;import java.net.URL; import static javafx.concurrent.Worker.State.FAILED; public class SimpleSwingBrowser extends JFrame {  private final JFXPanel jfxPanel = new JFXPanel();    private WebEngine engine;     private final JPanel panel = new JPanel(new BorderLayout());    private final JLabel lblStatus = new JLabel();    private final JButton btnGo = new JButton("Go");    private final JTextField txtURL = new JTextField();    private final JProgressBar progressBar = new JProgressBar();     public SimpleSwingBrowser() {        super();        initComponents();    }        private void initComponents() {        createScene();         ActionListener al = new ActionListener() {            @Override             public void actionPerformed(ActionEvent e) {                loadURL(txtURL.getText());            }        };         btnGo.addActionListener(al);        txtURL.addActionListener(al);          progressBar.setPreferredSize(new Dimension(150, 18));        progressBar.setStringPainted(true);          JPanel topBar = new JPanel(new BorderLayout(5, 0));        topBar.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 5));        topBar.add(txtURL, BorderLayout.CENTER);        topBar.add(btnGo, BorderLayout.EAST);         JPanel statusBar = new JPanel(new BorderLayout(5, 0));        statusBar.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 5));        statusBar.add(lblStatus, BorderLayout.CENTER);        statusBar.add(progressBar, BorderLayout.EAST);         panel.add(topBar, BorderLayout.NORTH);        panel.add(jfxPanel, BorderLayout.CENTER);        panel.add(statusBar, BorderLayout.SOUTH);                getContentPane().add(panel);                setPreferredSize(new Dimension(1024, 600));        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        pack();    }     private void createScene() {         Platform.runLater(new Runnable() {            @Override             public void run() {                 WebView view = new WebView();                engine = view.getEngine();                 engine.titleProperty().addListener(new ChangeListener<String>() {                    @Override                    public void changed(ObservableValue<? extends String> observable, String oldValue, final String newValue) {                        SwingUtilities.invokeLater(new Runnable() {                            @Override                             public void run() {                                SimpleSwingBrowser.this.setTitle(newValue);                            }                        });                    }                });                 engine.setOnStatusChanged(new EventHandler<WebEvent<String>>() {                    @Override                     public void handle(final WebEvent<String> event) {                        SwingUtilities.invokeLater(new Runnable() {                            @Override                             public void run() {                                lblStatus.setText(event.getData());                            }                        });                    }                });                 engine.locationProperty().addListener(new ChangeListener<String>() {                    @Override                    public void changed(ObservableValue<? extends String> ov, String oldValue, final String newValue) {                        SwingUtilities.invokeLater(new Runnable() {                            @Override                             public void run() {                                txtURL.setText(newValue);                            }                        });                    }                });                 engine.getLoadWorker().workDoneProperty().addListener(new ChangeListener<Number>() {                    @Override                    public void changed(ObservableValue<? extends Number> observableValue, Number oldValue, final Number newValue) {                        SwingUtilities.invokeLater(new Runnable() {                            @Override                             public void run() {                                progressBar.setValue(newValue.intValue());                            }                        });                    }                });                engine.getLoadWorker()                        .exceptionProperty()                        .addListener(new ChangeListener<Throwable>() {                             public void changed(ObservableValue<? extends Throwable> o, Throwable old, final Throwable value) {                                if (engine.getLoadWorker().getState() == FAILED) {                                    SwingUtilities.invokeLater(new Runnable() {                                        @Override public void run() {                                            JOptionPane.showMessageDialog(                                                    panel,                                                    (value != null) ?                                                    engine.getLocation() + "\n" + value.getMessage() :                                                    engine.getLocation() + "\nUnexpected error.",                                                    "Loading error...",                                                    JOptionPane.ERROR_MESSAGE);                                        }                                    });                                }                            }                        });                jfxPanel.setScene(new Scene(view));            }        });    }     public void loadURL(final String url) {        Platform.runLater(new Runnable() {            @Override             public void run() {                String tmp = toURL(url);                 if (tmp == null) {                    tmp = toURL("http://" + url);                }                 engine.load(tmp);            }        });    }    private static String toURL(String str) {        try {            return new URL(str).toExternalForm();        } catch (MalformedURLException exception) {                return null;        }    }       public static void main(String[] args) {        SwingUtilities.invokeLater(new Runnable() {            public void run() {                SimpleSwingBrowser browser = new SimpleSwingBrowser();                browser.setVisible(true);                browser.loadURL("http://baidu.com");           }            });    }}




javafx.jar ,当然jdk的目录下就有.例如:C:\Program Files (x86)\Java\jdk1.7.0_75\jre\lib\jfxrt.jar

或者 下载地址:  http://download.csdn.net/detail/lhf214111967/8741741

1 0
原创粉丝点击