How do I initialize Google Maps API key when using GMapsFX and FXML?

Magnus2142 :

Im trying to set up a JavaFX project where I use GMapsFX. I have already gotten it to work without using FXML where I just initialized the GoogleMapView variable in the start() method. Therefore I also assume my API key is not the problem. However, when using FXML I'm not really sure where to initialize it. All I get is either: "For developer use only" or a blank page. Is it possible that the reason could be that the FXML loads before the initialize() method in an FXML-controller?

Here is my 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);

        });
    }
}

And here is my 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>

Thanks in advance! :)

mipa :

There are several issues in your code. I don't know the API of GMapsFX but if the constructor GoogleMapView is the only way to set the key, then I would propose the following. In your FXML file only define the container into which you want to place your map view. Then in the initialize method (which is called automatically after the instantiation of the FXML part) create the map view manually and add it to the container. Remove all other initializations because they won't work.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

Do I need to hide API key when using google maps js API? If so, how?

How do I initialize a map in street view mode using react-google-maps

Google Maps Places: Why do I need an API key?

How do I restrict my Google Maps Time Zone API key to an Android application?

How do I use Distance Matrix API in ReactJS using @react-google-maps/api?

How can i add API key in this Google maps code

How do I initialize the DatePicker in a Java FXML app?

How do you handle outputs from google maps distance matrix api when using with python?

How do I access a Map object using React Google Maps API?

How do I create environment variables to protect my Google Maps API Key(or any other secret value) for my website?

How do i secure my Google Maps API?

How many Google Maps API Keys do I need?

How do I adjust the search radius of places in Google Maps API?

How do I create a legend in Google Maps API?

How do I determine when Google maps is Speaking in Android

Google maps api REQUEST_DENIED when using API restrictions & key

How do I output the geojon points on google maps using javascript?

How to check if Google maps API key is integrated

How do I create a Map using Java stream API when the key is a different class attribute?

Remove Google map api key form AndroidManifest.xml when using react-native maps

How to set a static distance when initialize the maps api on android

Removing a Polygon when using Google Maps API

How to Initialize Google Maps Layers

How do I upload to Google Cloud Storage with Curl and an API key?

How to add the Google Maps API key for a React app created with create-react-app using react-google-maps?

How come one doesn't need a Google Maps API Key to do this?

How do i hide API key when it must be wrapped in apostrophe?

How do I fix daily Limit Exceeded when using the .NET client for the google translation API?

How do I find out what permissions are missing when using Google's API?