package org.ewidgetfx.widget.conferencetour; import javafx.application.Application; import javafx.beans.value.ObservableValue; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.control.Accordion; import javafx.scene.control.TitledPane; import javafx.scene.effect.Reflection; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.BorderPane; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.Stage; public class ConferenceTour extends Pane { public static void main(String[] args) { } WebEngine engine; public ConferenceTour() { setWidth(700); setHeight(450); getChildren().add(createMap()); } private BorderPane createMap() { BorderPane inner = new BorderPane(); inner.setCenter(createWebView()); inner.setLeft(createConferences()); BorderPane outer = new BorderPane(); AnchorPane anchor = new AnchorPane(); anchor.getChildren().add(inner); AnchorPane.setBottomAnchor(inner, 100d); AnchorPane.setTopAnchor(inner, 30d); AnchorPane.setLeftAnchor(inner, 30d); AnchorPane.setRightAnchor(inner, 30d); outer.setCenter(anchor); return outer; } private WebView createWebView() { WebView webView = new WebView(); engine = webView.getEngine(); webView.getEngine().load(getClass().getResource("content.html").toString()); webView.setEffect(new Reflection(10, .5, .75, 0)); return webView; } private Accordion createConferences() { Accordion accordion = new Accordion(); final TitledPane india = createConference("JavaOne India", 17.385371, 78.484268, "http://steveonjava.com/wp-content/uploads/2011/03/javaone-india.png"); accordion.getPanes().add(india); accordion.getPanes().add(createConference("OSCON", 45.515008, -122.693253, "http://steveonjava.com/wp-content/uploads/2011/05/oscon.png")); accordion.getPanes().add(createConference("Devoxx", 51.206883, 4.44, "http://steveonjava.com/wp-content/uploads/2010/07/LogoDevoxxNeg150.png")); accordion.getPanes().add(createConference("J-Fall", 52.219913, 5.474253, "http://steveonjava.com/wp-content/uploads/2011/11/jfall3.png")); accordion.getPanes().add(createConference("JavaOne SF", 37.775057, -122.416534, "http://steveonjava.com/wp-content/uploads/2010/07/JavaOne-2010-Speaker.png")); accordion.getPanes().add(createConference("Jazoon", 47.382079, 8.528137, "http://steveonjava.com/wp-content/uploads/2010/04/jazoon.png")); accordion.getPanes().add(createConference("GeeCON", 50.064633, 19.949799, "http://steveonjava.com/wp-content/uploads/2011/03/geecon.png")); india.setExpanded(true); accordion.setExpandedPane(india); accordion.expandedPaneProperty().addListener((ObservableValue<? extends TitledPane> ov, TitledPane t, TitledPane t1) -> { if (t1 != null) { ((ConferencePane) t1).navigateTo(); } }); return accordion; } private ConferencePane createConference(String name, final double lat, final double lon, String imageUrl) { return new ConferencePane(name, new ImageView(new Image(imageUrl)), lat, lon); } public class ConferencePane extends TitledPane { private final double lat; private final double lon; private ConferencePane(String label, Node node, double lat, double lon) { super(label, node); this.lat = lat; this.lon = lon; } public void navigateTo() { engine.executeScript("moveMap(" + lat + ", " + lon + ");"); } } }