簡體   English   中英

JavaFX-在javascript代碼完成后顯示警報或對話框(GMapsFX,WebView)

[英]JavaFX - displaying alert or dialog after javascript code completes (GMapsFX, WebView)

在我的JavaFX應用程序中,我使用GMapsFX進行路線查找和可視化。 為了實現可視化,我只使用Java語言中的超時並在地圖上延遲顯示標記。 我遇到的麻煩是在可視化結束后顯示對話框(或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)
}

WebView沒有內置警報。 通過onAlert事件處理程序在JavaFX中使用Alerts / Dialogs或自定義視圖,需要發生由於WebView中的javascript顯示的任何警報。 您可以使用以下方法獲取WebEngine並注冊事件處理程序以響應javascript中的警報事件:

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

您的事件處理程序將獲取發出的所有JavaScript警報的String值。 在這里,由您決定如何顯示它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM