gpt4 book ai didi

java - 使用 GMapsFX 和 FXML 时如何初始化 Google map API key ?

转载 作者:行者123 更新时间:2023-12-02 00:57:59 24 4
gpt4 key购买 nike

我正在尝试建立一个使用 GMapsFXJavaFX 项目。我已经在不使用 FXML 的情况下让它工作了,我只是在 start() 方法中初始化了 GoogleMapView 变量。因此我也认为我的 API key 不是问题。然而,当使用 FXML 时,我不太确定在哪里初始化它。我得到的只是:“仅供开发人员使用”或空白页面。原因是否可能是 FXML 在 FXML Controller 中的 initialize() 方法之前加载?

这是我的 Controller :

public class MapSceneController implements Initializable, MapComponentInitializedListener {

//I have tried to initialize it here
@FXML
private GoogleMapView mapView = new GoogleMapView(Locale.getDefault().getLanguage(), "AIzaSyAaCPNXgEw5zlJTHLr0MYOmvxOcQ50vLdw");

@FXML
private TextField addressTextField;

private GoogleMap map;

private GeocodingService geocodingService;

private StringProperty address = new SimpleStringProperty();

@Override
public void mapInitialized() {
//And here
//mapView = new GoogleMapView(Locale.getDefault().getLanguage(), "AIzaSyAaCPNXgEw5zlJTHLr0MYOmvxOcQ50vLdw");
geocodingService = new GeocodingService();
MapOptions mapOptions = new MapOptions();

mapOptions.center(new LatLong(47.6097, -122.3331))
.mapType(MapTypeIdEnum.ROADMAP)
.overviewMapControl(false)
.panControl(false)
.rotateControl(false)
.scaleControl(false)
.streetViewControl(false)
.zoomControl(false)
.zoom(12);

map = mapView.createMap(mapOptions);
}

@Override
public void initialize(URL location, ResourceBundle resources) {
//And here
//mapView = new GoogleMapView(Locale.getDefault().getLanguage(), "AIzaSyAaCPNXgEw5zlJTHLr0MYOmvxOcQ50vLdw");
mapView.addMapInitializedListener(this);
address.bind(addressTextField.textProperty());
}

@FXML
public void addressTextFieldAction(ActionEvent event) {
geocodingService.geocode(address.get(), (GeocodingResult[] results, GeocoderStatus status) -> {

LatLong latLong = null;

if( status == GeocoderStatus.ZERO_RESULTS) {
Alert alert = new Alert(Alert.AlertType.ERROR, "No matching address found");
alert.show();
return;
} else if( results.length > 1 ) {
Alert alert = new Alert(Alert.AlertType.WARNING, "Multiple results found, showing the first one.");
alert.show();
latLong = new LatLong(results[0].getGeometry().getLocation().getLatitude(), results[0].getGeometry().getLocation().getLongitude());
} else {
latLong = new LatLong(results[0].getGeometry().getLocation().getLatitude(), results[0].getGeometry().getLocation().getLongitude());
}

map.setCenter(latLong);

});
}
}

这是我的 FXML:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<?import com.lynden.gmapsfx.GoogleMapView?>
<AnchorPane id="AnchorPane" prefHeight="600" prefWidth="1066" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.65" fx:controller="sample.JavaFX.MapScene.MapSceneController">
<children>
<GoogleMapView fx:id="mapView" prefHeight="600.0" prefWidth="1066.0" AnchorPane.bottomAnchor="0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0" AnchorPane.topAnchor="0.0"/>
<TextField fx:id="addressTextField" onAction="#addressTextFieldAction" prefHeight="27.0" prefWidth="274.0" promptText="Address" AnchorPane.leftAnchor="10" AnchorPane.topAnchor="10" />
</children>
</AnchorPane>

提前致谢! :)

最佳答案

您的代码中有几个问题。我不知道 GMapsFX 的 API,但如果构造函数 GoogleMapView 是设置 key 的唯一方法,那么我会提出以下建议。在 FXML 文件中,仅定义要放置 map View 的容器。然后在初始化方法(在实例化 FXML 部分后自动调用)中手动创建 map View 并将其添加到容器中。删除所有其他初始化,因为它们不起作用。

关于java - 使用 GMapsFX 和 FXML 时如何初始化 Google map API key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61075586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com