La risposta è located here:
In JavaFX 2.1 e versioni precedenti, classi controller sono stati necessari per implementare l'interfaccia Initializable ricevere una notifica quando il contenuto del documento FXML associata era stato completamente caricato. In JavaFX 2.2, questo non è più necessario. Un'istanza della classe FXMLLoader cerca semplicemente il metodo initialize() sul controller e chiama lo , se disponibile. Si noti che, analogamente ad altri metodi di callback FXML come gestori di eventi, questo metodo deve essere annotato con l'annotazione @FXML se non è pubblico.
Si consiglia agli sviluppatori di utilizzare questo approccio per il nuovo sviluppo . L'interfaccia Inizializzabile non è stata deprecata, ma potrebbe essere in una versione futura.
EDIT
Dopo ulteriori ricerche, ora posso ora fornire uno SSCCE che dimostra come iniettare un pacchetto di risorse in un controller con annotazioni. Si noti che questo SSCCE contiene lievi modifiche dalla risposta allo this SO question.
Ecco la SSCCE:
com/StackExchange/StackOverflow/_20107463/MyController.java:
package com.stackexchange.stackoverflow._20107463;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
public class MyController {
@FXML
private Label label;
@FXML private ResourceBundle resources;
@FXML
private void initialize() {
label.setText(resources.getString("key1"));
}
// Or if you don't want to use @FXML you could do:
//public void initialize() {
// label.setText(resources.getString("key1"));
//}
}
com/StackExchange/StackOverflow/_20107463/MyView.fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.*?>
<BorderPane fx:controller="com.stackexchange.stackoverflow._20107463.MyController" xmlns:fx="http://javafx.com/fxml">
<top>
<!-- This label's text will be set by the controller -->
<Label fx:id="label"/>
</top>
<center>
<!-- This label's text will be taken from the bundle automatically -->
<Label text="%key2"/>
</center>
</BorderPane>
com/stackexchange/stackoverflow/_20107 463/BundleDemo.java:
package com.stackexchange.stackoverflow._20107463;
import java.io.IOException;
import java.util.Locale;
import java.util.ResourceBundle;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBoxBuilder;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class BundleDemo extends Application {
private Stage stage;
@Override
public void start(Stage primaryStage) {
stage = primaryStage;
Button btnEN = new Button();
btnEN.setText("English");
btnEN.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent event) {
loadView(new Locale("en", "EN"));
}
});
Button btnKG = new Button();
btnKG.setText("Español");
btnKG.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent event) {
loadView(new Locale("es", "ES"));
}
});
VBox root = new VBox(20);
root.getChildren().add(HBoxBuilder.create().spacing(10).style("-fx-background-color: gray").padding(new Insets(5)).children(btnEN, btnKG).build());
root.getChildren().add(new StackPane());
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
private void loadView(Locale locale) {
try {
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setResources(ResourceBundle.getBundle("com.stackexchange.stackoverflow.bundles.MyBundle", locale));
Pane pane = (BorderPane) fxmlLoader.load(this.getClass().getResource("MyView.fxml").openStream());
// replace the content
StackPane content = (StackPane) ((VBox) stage.getScene().getRoot()).getChildren().get(1);
content.getChildren().clear();
content.getChildren().add(pane);
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
com/StackExchange/StackOverflow/_20107463/MyBundle_en.properties:
key1=Name Surname
key2=How are you?
com/StackExchange/StackOverflow/_20107463/MyBundle_es.proprietà:
key1=Apellido
key2=Que tal?
tag @fxml Suzan dimostra che la variabile o il controller sono in progettazione fxml ... per la progettazione di un modo migliore fxml può essere questo aiuterà 'stackoverflow.com/questions/19523341/adding-a-tilepane -instantiated-in-java-files-to-fxml' –
Sono sorpreso che la risposta non sia stata ancora accettata. :) – axiopisty