【问题标题】:JavaFX - displaying alert or dialog after javascript code completes (GMapsFX, WebView)JavaFX - 在 javascript 代码完成后显示警报或对话框(GMapsFX、WebView)
【发布时间】:2015-12-17 05:25:04
【问题描述】:

在我的 JavaFX 应用程序中,我使用 GMapsFX 进行路线查找和可视化。对于可视化,我只是在 Javascript 中使用超时并延迟在地图上显示标记。我遇到的麻烦是在可视化结束后显示一个对话框(或 js 警报),告诉有关搜索的信息(访问的节点数,我在我的 java 和 js 代码中都有这个可用)。有没有简单的方法来做到这一点?

GMapsFX 包: http://rterp.github.io/GMapsFX/

public void startVisualization() {

        LatLongBounds bounds = new LatLongBounds();
        List<LatLong> latLongs = new ArrayList<LatLong>();
        JavascriptArray jsArray = new JavascriptArray();
        manager.hideIntermediateMarkers();
        manager.hideDestinationMarker();

        // create Markers
        for(geography.GeographicPoint point : points) {
            LatLong ll = new LatLong(point.getX(), point.getY());
            MarkerOptions options = MarkerManager.createDefaultOptions(ll);
            Marker newMarker = new Marker(options);
            jsArray.push(newMarker);
            markerList.add(newMarker);
            bounds.extend(ll);
        }

        // fit map bounds to visualization
        manager.getMap().fitBounds(bounds);

        // get javascript runtime and execute animation
        runtime = JavascriptRuntime.getInstance();
        String command = runtime.getFunction("visualizeSearch", manager.getMap(), jsArray);
        System.out.println(command);

        runtime.execute(command);

//      MapApp.showInfoAlert("Nodes visited :"  , latLongs.size() +" nodes were visited in the search");
        manager.disableVisButton(true);
//        manager.disableRouteButtons(false);
}


var delay = 300;
var map, markers;
var markerURL = "http://maps.google.com/mapfiles/kml/paddle/red-diamond-lv.png";
var destURL = "http://maps.google.com/mapfiles/kml/pal2/icon5.png";

function visualizeSearch(mapParam, markersParam) {
    markers = markersParam;
    map = mapParam; 
    drop();
}

function displayMarker(marker, timeout, URL) {
    window.setTimeout(function() {
        marker.setIcon(URL);
        marker.setMap(map);
    }, timeout);
}

function drop() {
    var i;
    for(i = 1; i < markers.length - 1; ++i) {
        displayMarker(markers[i], i*delay, markerURL);
    }
    displayMarker(markers[markers.length - 1], i*delay, destURL)
}

【问题讨论】:

    标签: javascript java google-maps javafx webview


    【解决方案1】:

    WebView 没有内置警报。在 WebView 中由于 javascript 显示的任何警报都需要通过 onAlert 事件处理程序使用警报/对话框或 JavaFX 中的自定义视图来发生。您可以使用以下方法获取 WebEngine 并注册事件处理程序以响应来自 javascript 的警报事件:

    gmapview.getWebView().getEngine().setOnAlert(EventHandler<WebEvent<String>> e);
    

    您的事件处理程序将获取任何发出的 javascript 警报的字符串值。由您决定如何显示它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多