webviewsample.Main.java Source code

Java tutorial

Introduction

Here is the source code for webviewsample.Main.java

Source

package webviewsample;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker.State;
import javafx.event.ActionEvent;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.geometry.HPos;
import javafx.geometry.Pos;
import javafx.geometry.VPos;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Hyperlink;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.scene.paint.Color;
import javafx.scene.web.PopupFeatures;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import javafx.util.Callback;
import netscape.javascript.JSObject;

public class Main extends Application {

    private Scene scene;

    @Override
    public void start(Stage stage) {
        // create scene
        stage.setTitle("Web View");
        scene = new Scene(new Browser(), 750, 500, Color.web("#666970"));
        stage.setScene(scene);
        scene.getStylesheets().add("webviewsample/BrowserToolbar.css");
        // show stage
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

class Browser extends Region {

    private HBox toolBar;
    private static String[] imageFiles = new String[] { "product.png", "blog.png", "forum.png", "partners.png",
            "help.png" };
    private static String[] captions = new String[] { "Products", "Blogs", "Forums", "Partners", "Help" };
    private static String[] urls = new String[] { "http://www.oracle.com/products/index.html",
            "http://blogs.oracle.com/", "http://forums.oracle.com/forums/",
            "http://www.oracle.com/partners/index.html", Main.class.getResource("help.html").toExternalForm() };
    final ImageView selectedImage = new ImageView();
    final Hyperlink[] hpls = new Hyperlink[captions.length];
    final Image[] images = new Image[imageFiles.length];
    final WebView browser = new WebView();
    final WebEngine webEngine = browser.getEngine();
    final Button hideAll = new Button("Hide All");
    final Button showAll = new Button("ShowAll");
    final WebView smallView = new WebView();

public Browser() {
    //apply the styles
    getStyleClass().add("browser");

    // load the home page        
    webEngine.load("http://www.oracle.com/products/index.html");

    for (int i = 0; i < captions.length; i++) {
        final Hyperlink hpl = hpls[i] = new Hyperlink(captions[i]);
        Image image = images[i] =
            new Image(getClass().getResourceAsStream(imageFiles[i]));
        hpl.setGraphic(new ImageView(image));
        final String url = urls[i];
            
        hpl.setOnAction(new EventHandler<ActionEvent>() {
            @Override public void handle(ActionEvent e) {
                webEngine.load(url);
                webEngine.getLoadWorker().stateProperty().addListener(
                    new ChangeListener<State>() {  
                        @Override
                        public void changed(ObservableValue<? extends State>
                            ov, State oldState, State newState) {
                            if (!hpl.getText().equals("Forums")) { 
                                toolBar.getChildren().removeAll(showAll, 
                                        hideAll); }
                            if (newState == State.SUCCEEDED) {
                                JSObject win = (JSObject) 
                                webEngine.executeScript("window");
                                win.setMember("app", new JavaApp());
                                if (hpl.getText().equals("Forums")) {
                                    toolBar.getChildren().removeAll(showAll, 
                                            hideAll);
                                    toolBar.getChildren().addAll(showAll, 
                                            hideAll);
                                }
                            }
                        }
                    });
            }
        });
    }
    // create the toolbar
    toolBar = new HBox();
    toolBar.setAlignment(Pos.CENTER);
    toolBar.getStyleClass().add("browser-toolbar");
    toolBar.getChildren().addAll(hpls);
    toolBar.getChildren().add(createSpacer());

    hideAll.setOnAction(new EventHandler() {

    @Override
        public void handle(Event t) {
            webEngine.executeScript("hideAll()");
        }
    });

    showAll.setOnAction(new EventHandler() {
        @Override
        public void handle(Event t) {
            webEngine.executeScript("showAll()");
        }
    });

    smallView.setPrefSize(120, 80);
    webEngine.setCreatePopupHandler(
        new Callback<PopupFeatures, WebEngine>() {
            @Override
            public WebEngine call(PopupFeatures config) {
                smallView.setFontScale(0.8);
                if (!toolBar.getChildren().contains(smallView)) {
                    toolBar.getChildren().add(smallView);
                }
                return smallView.getEngine();
            }
    });
    //add components
    getChildren().add(toolBar);
    getChildren().add(browser);
}

    // JavaScript interface object
    private class JavaApp {
        public void exit() {
            Platform.exit();
        }
    }

    private Node createSpacer() {
        Region spacer = new Region();
        HBox.setHgrow(spacer, Priority.ALWAYS);
        return spacer;
    }

    @Override
    protected void layoutChildren() {
        double w = getWidth();
        double h = getHeight();
        double tbHeight = toolBar.prefHeight(w);
        layoutInArea(browser, 0, 0, w, h - tbHeight, 0, HPos.CENTER, VPos.CENTER);
        layoutInArea(toolBar, 0, h - tbHeight, w, tbHeight, 0, HPos.CENTER, VPos.CENTER);
    }

    @Override
    protected double computePrefWidth(double height) {
        return 750;
    }

    @Override
    protected double computePrefHeight(double width) {
        return 600;
    }
}.browser{-fx-background-color:#666970;}.browser-toolbar.hyperlink,.browser-toolbar.button,.browser-toolbar{-fx-text-fill:white;}.browser-toolbar{-fx-base:#505359;-fx-background:#505359;-fx-shadow-highlight-color:transparent;-fx-spacing:5;-fx-padding:4 4 4 4;}