JavaFX Webengine の Leaflet に問題があります。GPS トラックを geoJson 形式で視覚化したいと考えています。以下のコード リストは、これまでに開発した 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>
この HTML ページを Iceweasel/Firefox で開くと、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 Web エンジンでは、マウスがトラック上にあるかどうかに関係なく、カーソルは常にクリック可能なシンボルを表示します。この問題を解決する方法を知っている人はいますか?
編集 (2015-07-10): Web エンジンには、描画されたパスのクリックを判断するのに問題があると思います。マップがクリックされたときにアラートを開くメソッドを追加しました。
map.on('click', function(){
alert("map clicked");
});
これは私にとってはうまくいきます。しかし、パスの同じ機能は機能しません:
streets.on('click', function(e){
alert(e.layer.feature.properties.phase);
});
また、AlertHandler を JavaFX Web エンジンに追加しました。