我在 JavaFX Webengine 中的 Leaflet 遇到了一些问题。我想用 geoJson 格式可视化 GPS 轨迹。下面的代码清单显示了我迄今为止开发的 HTML 和 JavaScript 代码。
<html>
<head>
<title>A Leaflet map!</title>
<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css"/>
<script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
<script src="79_SubaruStretch.js"></script>
<style>
#map{ height: 100% }
</style>
</head>
<body>
<div id="map"></div>
<script>
var map = L.map('map').setView([48.70, 8.98], 13);
L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map); //will be our basemap.
function onEachFeature(feature, layer) {
if (feature.properties) {
layer.bindPopup("<b>" + feature.properties.phase + "</b> from" + feature.properties.from + " to " + feature.properties.to);
}
}
//map.tap.disable();
var streets = new L.geoJson(roads, {
onEachFeature: onEachFeature,
style: function(feature) { return {color: feature.properties.color}; }
}).addTo(map);
</script>
</body>
</html>
当我用 Iceweasel/Firefox 打开这个 HTML 页面时,我可以单击 gps 图,然后会显示弹出窗口。但是,当我在 JavaFX WebEngine 中打开相同的 HTML 页面时,我无法再单击该轨道。下面的代码显示了 JavaFX 应用程序。
public class WebViewSample extends Application {
private Scene scene;
@Override public void start(Stage stage) {
// create the scene
stage.setTitle("Web View");
scene = new Scene(new Browser(),750,500, Color.web("#666970"));
stage.setScene(scene);
// scene.getStylesheets().add("webviewsample/BrowserToolbar.css");
stage.show();
}
public static void main(String[] args){
launch(args);
}
}
class Browser extends Region {
final WebView smallView = new WebView();
final WebView browser = new WebView();
final WebEngine webEngine = browser.getEngine();
public Browser() {
//apply the styles
getStyleClass().add("browser");
// load the web page
webEngine.load("file:///test2.html");
webEngine.setJavaScriptEnabled(true);
// webEngine.load("http://openstreetmap.de/karte.html");
//add the web view to the scene
getChildren().add(browser);
}
private Node createSpacer() {
Region spacer = new Region();
HBox.setHgrow(spacer, Priority.ALWAYS);
return spacer;
}
@Override protected void layoutChildren() {
double w = getWidth();
double h = getHeight();
layoutInArea(browser,0,0,w,h,0, HPos.CENTER, VPos.CENTER);
}
@Override protected double computePrefWidth(double height) {
return 750;
}
@Override protected double computePrefHeight(double width) {
return 500;
}
}
当我将光标放在 Iceweasel 中的轨道上时,光标会发生变化并显示该轨道是可点击的。在 JavaFX 网络引擎中,无论鼠标是否位于轨道上,光标始终显示可点击符号。有人知道如何解决这个问题吗?
编辑(2015-07-10): 我认为网络引擎在确定点击绘制的路径时存在问题。我添加了一个在点击地图时打开警报的方法:
map.on('click', function(){
alert("map clicked");
});
这对我来说很好。但是路径的相同功能不起作用:
streets.on('click', function(e){
alert(e.layer.feature.properties.phase);
});
我还在 JavaFX 网络引擎中添加了一个 AlertHandler。