Die Antwort ist located here:
In JavaFX 2.1 und früher wurden Controller-Klassen erforderlich, um die initialisierbare Schnittstelle implementieren benachrichtigt werden, wenn der Inhalt des zugehörigen FXML Dokument vollständig geladen worden war. In JavaFX 2.2 ist dies nicht mehr notwendig. Eine Instanz der FXMLLoader-Klasse sucht einfach nach der initialize() -Methode auf dem Controller und ruft , sofern verfügbar, auf. Beachten Sie, dass diese Methode ähnlich wie andere FXML-Rückrufmethoden wie Ereignisbehandlungsroutinen mit der Anmerkung @FXML kommentiert werden muss, wenn sie nicht öffentlich ist.
Es wird empfohlen, dass Entwickler diesen Ansatz für neue Entwicklung verwenden. Die Schnittstelle Initialisierbar wurde nicht veraltet, aber könnte in einer zukünftigen Version enthalten sein.
EDIT
Nach mehr Forschung, kann ich jetzt liefern nun eine SSCCE demonstriert, wie ein Ressourcenbündel in einen Controller mit Anmerkungen zu injizieren. Bitte beachten Sie, dass dieses SSCCE geringfügige Änderungen von der Antwort auf this SO question enthält. Hier
ist die SSCCE:
com/Stack/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/Stack/Stackoverflow/_20107463/MyView.fxml:
com/staplexchange/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/Stack/Stackoverflow/_20107463/MyBundle_en.properties:
key1=Name Surname
key2=How are you?
com/Stack/Stackoverflow/_20107463/MyBundle_es.Eigenschaften:
key1=Apellido
key2=Que tal?
suzan @fxml Tag zeigt, dass der Variable oder Reglerentwurf in fxml ist ... für eine bessere fxml zu gestalten, können diese Ihnen helfen, 'stackoverflow.com/questions/19523341/adding-a-tilepane -instantiated-in-java-files-to-fxml' –
Ich bin überrascht, dass die Antwort noch nicht akzeptiert wurde. :) – axiopisty