2013-11-14 18 views
1

基本上我想在google map上將標記移動到新的位置,一旦用戶輸入。JavaFX - 通過輸入更新WebView中的變量值

如何我期待實現它:

  1. 我做了一個HTML文件,這需要所有的JavaScript和地圖部分的護理。標記已設置。

  2. 我已經將該文件嵌入到JavaFX的WebView中。

  3. 在我的JavaFX應用程序中,有2個textfied,其中a輸入一個值,併成爲緯度和經度的新值,因此標記移動。

我在哪裏」卡住

我在HTML文件中,緯度和經度2個變量。他們決定了標記的位置。

通過我的JavaFX應用程序actionlistners,我該如何更新lat和lon的值?

在這裏,在我的代碼

HTML文件

<!DOCTYPE html> 
<html> 
    // stuff and stuff 
var map; 
function initialize() { 
    var lat = 30.76; 
    var lon = 76.74; 
    var myLatlng = new google.maps.LatLng(lat, lon); 
    var mapOptions = { 
    zoom: 12, 
    center: new google.maps.LatLng(30.75, 76.78), 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    map = new google.maps.Map(document.getElementById('map-canvas'), 
     mapOptions); 

var marker = new google.maps.Marker({ 
     position: myLatlng, 
     map: map, 
     title: 'Hello World!' 
    }); 


} 

google.maps.event.addDomListener(window, 'load', initialize); 

    //stuff and stuff 

,這裏是我的JavaFX文件

public class GoogleApp extends Application { 



private Scene scene; 
    MyBrowser myBrowser; 
    String lat; 
    String lon; 


    public static void main(String[] args) { 
     launch(args); 
    } 

    //stuff and stuff 

    class MyBrowser extends Pane{ 

     HBox toolbar; 

     WebView webView = new WebView(); 
     WebEngine webEngine = webView.getEngine(); 



     public MyBrowser(){ 

      final URL urlGoogleMaps = getClass().getResource("demo.html"); 
      webEngine.load(urlGoogleMaps.toExternalForm()); 

      getChildren().add(webView); 

      final TextField latitude = new TextField("latitude"); 
      final TextField longitude = new TextField("longitude"); 
      Button update = new Button("Update"); 
      update.setOnAction(new EventHandler<ActionEvent>() { 

      @Override 
      public void handle(ActionEvent arg0) { 
       lat = latitude.getText(); 
       lon = longitude.getText(); 

       System.out.println(lat + lon); 
      } 
     }); 

     getChildren().addAll(latitude, longitude, update); 

     } 
    } 

} 

回答

2

你可以把他們在全球範圍內將其分配給window在網頁上全局可見的對象。即

在JS:

window.lat = 30.76; 
window.lon = 76.74; 

在Java executeScript將在網頁的範圍執行JS代碼和值賦給一個全局變量:

webEngine.executeScript("window.lat = 31.2;"); 

您也可以把它們成對象:

JS:

window.coordinates = {lat: 100, lon: 250} 

的Java:

webEngine.executeScript("window.coordinates.lat = 31.2;"); 

UPDATE

工作演示:https://gist.github.com/chaschev/7481304

+0

似乎沒有工作。爲了確認它們是否得到更新,我在html文件中顯示了lat/lon變量的值(document.getElementById('lbllatitude')。innerHTML = window.lat;)。而且,在執行(webEngine.executeScript(「window.lat = 45;」);)時,它根本不會改變。 – satnam

+0

恐怕原來的演示程序中包含了一些錯誤(例如,應該只有'marker'而不是'document.marker')。我創建了一個工作要點:https://gist.github.com/chaschev/7481304。 –

+0

是的!它的工作!非常感謝 – satnam