Как инициализировать ключ API Карт Google при использовании GMapsFX и F XML? - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь настроить JavaFX проект, в котором я использую GMapsFX. Я уже заставил его работать без использования F XML, где я только что инициализировал переменную GoogleMapView в методе start (). Поэтому я также предполагаю, что мой ключ API не является проблемой. Однако при использовании F XML я не совсем уверен, где его инициализировать. Все, что я получаю, это либо: «Только для разработчиков», либо пустая страница. Возможно, причина в том, что F XML загружается до initialize() метода в F XML -контроллере?

Вот мой контроллер:

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);

        });
    }
}

А вот и мой F XML:

<?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>

Заранее спасибо! :)

1 Ответ

2 голосов
/ 07 апреля 2020

В вашем коде есть несколько проблем. Я не знаю API GMapsFX, но если конструктор GoogleMapView является единственным способом установить ключ, то я бы предложил следующее. В вашем файле F XML определите только контейнер, в который вы хотите поместить вид карты. Затем в методе initialize (который вызывается автоматически после создания экземпляра детали F XML) вручную создайте представление карты и добавьте его в контейнер. Удалите все остальные инициализации, потому что они не будут работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...