1

基本上,我想在用户输入后将谷歌地图上的标记移动到新位置。

我如何实现它:

  1. 我制作了一个 html 文件,它负责处理所有的 javascript 和地图部分。标记已设置。

  2. 我已经将该 html 文件嵌入到 JavaFX 的 WebView 中。

  3. 在我的 JavaFX 应用程序中有 2 个文本字段,其中 a 输入一个值并成为纬度和经度的新值,因此标记移动。

我卡住的地方

我在 html 文件中有 2 个变量,lat 和 lon。它们决定了标记的位置。

通过我的 JavaFX 应用程序 actionlistner,我如何更新 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);

      }
  }

}
4

1 回答 1

2

您可以通过将它们分配给window在网页上全局可见的对象来将它们置于全局范围内。IE

在 JS 中:

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

在 JavaexecuteScript中将在网页范围内执行 JS 代码,并为全局 var 赋值:

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

您也可以将它们放入对象中:

JS:

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

爪哇:

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

更新

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

于 2013-11-14T22:27:52.493 回答