gisintegration.SimpleSwingBrowser.java Source code

Java tutorial

Introduction

Here is the source code for gisintegration.SimpleSwingBrowser.java

Source

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package gisintegration;

import com.rameses.rcp.common.DocViewModel;
import com.rameses.rcp.common.MsgBox;
import com.rameses.rcp.common.PropertySupport;
import com.rameses.rcp.framework.Binding;
import com.rameses.rcp.ui.UIControl;
import com.rameses.rcp.util.UIControlUtil;
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.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;

import static javafx.concurrent.Worker.State.FAILED;
import org.apache.commons.io.FileUtils;

public class SimpleSwingBrowser extends JPanel implements UIControl {

    private Binding binding;
    private String[] depends;
    private int index;
    private boolean refreshed;
    private int stretchWidth;
    private int stretchHeight;
    private DocViewModel docModel;

    private 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() {
        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);

        setLayout(new BorderLayout());
        add(panel, BorderLayout.CENTER);

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

    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://oracle.com");
    //           }
    //       });
    //    }

    public void load() {
    }

    public void refresh() {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                SimpleSwingBrowser browser = new SimpleSwingBrowser();
                browser.setVisible(true);
                refreshBrowser();
            }
        });

    }

    private void refreshBrowser() {
        DocViewModel newModel = null;
        try {
            Object value = UIControlUtil.getBeanValue(this);

            if ((value instanceof DocViewModel)) {
                newModel = (DocViewModel) value;
                value = newModel.getValue();
            }
            URL url = null;
            if (value == null) {
                txtURL.setText("");
                txtURL.setCaretPosition(0);
            } else if ((value instanceof URL)) {
                url = (URL) value;
            } else if (value.toString().startsWith("http://")) {
                url = new URL(value.toString());
            } else {
                txtURL.setText(value.toString());
                txtURL.setCaretPosition(0);
            }
            this.docModel = newModel;

            loadURL(value.toString());
        } catch (Exception ex) {
            MsgBox.err(ex);
        }
    }

    public Binding getBinding() {
        return this.binding; //To change body of generated methods, choose Tools | Templates.
    }

    public void setBinding(Binding binding) {
        this.binding = binding; //To change body of generated methods, choose Tools | Templates.
    }

    public String[] getDepends() {
        return this.depends = depends; //To change body of generated methods, choose Tools | Templates.
    }

    public int getIndex() {
        return this.index = index; //To change body of generated methods, choose Tools | Templates.
    }

    public void setPropertyInfo(PropertySupport.PropertyInfo info) {

    }

    public int getStretchWidth() {
        return this.stretchWidth; //To change body of generated methods, choose Tools | Templates.
    }

    public void setStretchWidth(int stretchWidth) {
        this.stretchWidth = stretchWidth; //To change body of generated methods, choose Tools | Templates.
    }

    public int getStretchHeight() {
        return this.stretchHeight; //To change body of generated methods, choose Tools | Templates.
    }

    public void setStretchHeight(int stretchHeight) {
        this.stretchHeight = stretchHeight; //To change body of generated methods, choose Tools | Templates.
    }

    public int compareTo(Object o) {
        return UIControlUtil.compare(this, o); //To change body of generated methods, choose Tools | Templates.
    }
}