JavaFX - 通过输入更新WebView中的变量值

时间:2013-11-14 22:22:53

标签: java javascript variables javafx-2 javafx

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

我希望如何实现它:

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

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

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

  4. 我被困的地方

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

    通过我的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);
    
          }
      }
    
    }
    

1 个答案:

答案 0 :(得分: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}

爪哇:

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

<强>更新

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