Created
February 10, 2012 14:29
-
-
Save estiedi/1789915 to your computer and use it in GitHub Desktop.
JavaFX WebMap: exemple modifié de fxexperience.com
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package webmap; | |
import javafx.animation.KeyFrame; | |
import javafx.animation.Timeline; | |
import javafx.application.Application; | |
import javafx.beans.value.ChangeListener; | |
import javafx.beans.value.ObservableValue; | |
import javafx.event.ActionEvent; | |
import javafx.event.EventHandler; | |
import javafx.scene.Node; | |
import javafx.scene.Scene; | |
import javafx.scene.control.*; | |
import javafx.scene.layout.BorderPane; | |
import javafx.scene.layout.HBox; | |
import javafx.scene.layout.Priority; | |
import javafx.scene.layout.Region; | |
import javafx.scene.paint.Color; | |
import javafx.scene.web.WebEngine; | |
import javafx.scene.web.WebView; | |
import javafx.stage.Stage; | |
import javafx.util.Duration; | |
/** | |
* @author Jasper Potts | |
* This file is taken from an example project on the fxexperience.com website. | |
* http://fxexperience.com/2011/05/maps-in-javafx-2-0/ | |
* | |
* I slightly modified it to compile it in JavaFX 2.0.2 for a French article on JavaFx and Maven | |
* on my blog http://notaboekje.blogspot.com | |
*/ | |
public class WebMap extends Application { | |
private Timeline locationUpdateTimeline; | |
static { // use system proxy settings when standalone application | |
// System.setProperty("java.net.useSystemProxies", "true"); | |
} | |
public static void main(String[] args) { | |
launch(args); | |
} | |
@Override | |
public void start(Stage stage) { | |
// create web engine and view | |
final WebView webView = new WebView(); | |
final WebEngine webEngine = webView.getEngine(); | |
webEngine.load(getClass().getResource("/googlemap.html").toString()); | |
// create map type buttons | |
final ToggleGroup mapTypeGroup = new ToggleGroup(); | |
final ToggleButton road = new ToggleButton("Road"); | |
road.setSelected(true); | |
road.setToggleGroup(mapTypeGroup); | |
final ToggleButton satellite = new ToggleButton("Satellite"); | |
satellite.setToggleGroup(mapTypeGroup); | |
final ToggleButton hybrid = new ToggleButton("Hybrid"); | |
hybrid.setToggleGroup(mapTypeGroup); | |
final ToggleButton terrain = new ToggleButton("Terrain"); | |
terrain.setToggleGroup(mapTypeGroup); | |
mapTypeGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>() { | |
@Override | |
public void changed(ObservableValue<? extends Toggle> observableValue, Toggle toggle, Toggle toggle1) { | |
if (road.isSelected()) { | |
webEngine.executeScript("document.setMapTypeRoad()"); | |
} else if (satellite.isSelected()) { | |
webEngine.executeScript("document.setMapTypeSatellite()"); | |
} else if (hybrid.isSelected()) { | |
webEngine.executeScript("document.setMapTypeHybrid()"); | |
} else if (terrain.isSelected()) { | |
webEngine.executeScript("document.setMapTypeTerrain()"); | |
} | |
} | |
}); | |
// add map source toggles | |
ToggleGroup mapSourceGroup = new ToggleGroup(); | |
final ToggleButton google = new ToggleButton("Google"); | |
google.setSelected(true); | |
google.setToggleGroup(mapSourceGroup); | |
final ToggleButton yahoo = new ToggleButton("Yahoo"); | |
yahoo.setToggleGroup(mapSourceGroup); | |
final ToggleButton bing = new ToggleButton("Bing"); | |
bing.setToggleGroup(mapSourceGroup); | |
// listen to selected source | |
mapSourceGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>() { | |
@Override | |
public void changed(ObservableValue<? extends Toggle> observableValue, Toggle toggle, Toggle toggle1) { | |
terrain.setDisable(true); | |
if (google.isSelected()) { | |
terrain.setDisable(false); | |
webEngine.load(getClass().getResource("/googlemap.html").toString()); | |
} else if (yahoo.isSelected()) { | |
webEngine.load(getClass().getResource("/yahoomap.html").toString()); | |
} else if (bing.isSelected()) { | |
webEngine.load(getClass().getResource("/bingmap.html").toString()); | |
} | |
mapTypeGroup.selectToggle(road); | |
} | |
}); | |
// add search | |
final TextField searchBox = new TextField(""); | |
searchBox.setPrefColumnCount(12); | |
searchBox.setPromptText("Search"); | |
searchBox.textProperty().addListener(new ChangeListener<String>() { | |
@Override | |
public void changed(ObservableValue<? extends String> observableValue, String s, String s1) { | |
// delay location updates to we don't go too fast file typing | |
if (locationUpdateTimeline != null) { | |
locationUpdateTimeline.stop(); | |
} | |
locationUpdateTimeline = new Timeline(); | |
locationUpdateTimeline.getKeyFrames().add( | |
new KeyFrame(new Duration(1000), new EventHandler<ActionEvent>() { | |
@Override | |
public void handle(ActionEvent actionEvent) { | |
webEngine.executeScript("document.goToLocation(\"" + searchBox.getText() + "\")"); | |
} | |
})); | |
locationUpdateTimeline.play(); | |
} | |
}); | |
Button zoomIn = new Button("Zoom In"); | |
zoomIn.setOnAction(new EventHandler<ActionEvent>() { | |
@Override | |
public void handle(ActionEvent actionEvent) { | |
webEngine.executeScript("document.zoomIn()"); | |
} | |
}); | |
Button zoomOut = new Button("Zoom Out"); | |
zoomOut.setOnAction(new EventHandler<ActionEvent>() { | |
@Override | |
public void handle(ActionEvent actionEvent) { | |
webEngine.executeScript("document.zoomOut()"); | |
} | |
}); | |
// create toolbar | |
ToolBar toolBar = new ToolBar(); | |
toolBar.getStyleClass().add("map-toolbar"); | |
toolBar.getItems().addAll( | |
road, satellite, hybrid, terrain, | |
createSpacer(), | |
google, yahoo, bing, | |
createSpacer(), | |
new Label("Location:"), searchBox, zoomIn, zoomOut); | |
// create root | |
BorderPane root = new BorderPane(); | |
root.getStyleClass().add("map"); | |
root.setCenter(webView); | |
root.setTop(toolBar); | |
// create scene | |
stage.setTitle("Web Map"); | |
Scene scene = new Scene(root, 1000, 700, Color.web("#666970")); | |
stage.setScene(scene); | |
scene.getStylesheets().add("/WebMap.css"); | |
// show stage | |
stage.show(); | |
} | |
private Node createSpacer() { | |
Region spacer = new Region(); | |
HBox.setHgrow(spacer, Priority.ALWAYS); | |
return spacer; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
hello, can u sahre ur javascript code where u called the documents of the map and thanks