投稿したコードによれば、executeJavaScriptAndReturnValue()
は、マップイベントにリスナーを設定します。この場合、マップ側のイベントが受信されるとすぐにJava側にコールバックしてlatLng
の値を渡す必要があります。ここで
はアプローチを実証する完全なサンプルです:
public class GoogleMapsSample {
public static void main(String[] args) {
final Browser browser = new Browser();
browser.addScriptContextListener(new ScriptContextAdapter() {
@Override
public void onScriptContextCreated(ScriptContextEvent event) {
browser.executeJavaScriptAndReturnValue("window").asObject().setProperty("java", new JavaCallback());
}
});
BrowserView view = new BrowserView(browser);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(view, BorderLayout.CENTER);
frame.setSize(900, 500);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
// Provide the correct full path to the map.html file, e.g. D:\\map.html
Browser.invokeAndWaitFinishLoadingMainFrame(browser, new Callback<Browser>() {
@Override
public void invoke(Browser value) {
browser.loadURL("map.html");
}
});
browser.executeJavaScriptAndReturnValue(
"map.addListener('click', function(e) {\n" +
"placeMarker(e.latLng, map);\n" +
"});\n" +
"\n" +
"function placeMarker(position, map) {\n" +
" var marker = new google.maps.Marker({\n" +
" position: position,\n" +
" map: map,\n" +
" title:'test point',\n " +
" });\n" +
" map.panTo(position);\n" +
" window.java.onMarkerAdded(position);" +
"}");
}
public static class JavaCallback {
public void onMarkerAdded(JSObject position){
double lat = position.getProperty("lat").asFunction().invoke(position).asNumber().getDouble();
double lng = position.getProperty("lng").asFunction().invoke(position).asNumber().getDouble();
System.out.println("lat = " + lat + ", lng = " + lng);
}
}
}
このサンプルで使用することができますmap.html
のHTMLコード:はGoogleでAPI_KEYを置き換え、このファイルを使用するには
The code of our map.html file is the following:
HTML
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no"/>
<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 0; padding: 0 }
#map-canvas { height: 100% }
</style>
<script type="text/javascript"
src="https://maps.googleapis.com/maps/api/js?key=API_KEY&sensor=false"></script>
<script type="text/javascript">
var map;
function initialize() {
var mapOptions = {
center: new google.maps.LatLng(48.209331, 16.381302),
zoom: 4
};
map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map-canvas"></div>
</body>
</html>
APIキー。 APIキーを取得する方法については、instructionをご覧ください。
あなたは次の資料にJavaScriptからJavaへのコールバックの一般的な説明を見つけることができます。 https://jxbrowser.support.teamdev.com/support/solutions/articles/9000013062-calling-java-from-javascript