Heute habe ich Guice zu meiner Java FX Application hinzugefügt. Das Hauptziel bestand darin, die Singletons, die ich hatte, durch Injection zu ersetzen und Abhängigkeiten aufzubrechen. Bisher war alles in Ordnung, das ist der Code ich eine neue Szene zu beginnen haben:Daten mit Guice in JavaFX ViewController einspeisen
public class App extends Application{
public static void main(String[] args){
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
final String LANGUAGE_BUNDLE = "myBundlePath";
final String FXML = "myFXMLPath";
try {
ResourceBundle resourceBundle = ResourceBundle.getBundle(LANGUAGE_BUNDLE, Locale.GERMAN, this.getClass().getClassLoader());
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(FXML), resourceBundle, new JavaFXBuilderFactory(), getGuiceControllerFactory());
primaryStage.setScene(new Scene(fxmlLoader.load()));
primaryStage.show();
}catch (IOException ex) {
ex.printStackTrace();
}
}
private Callback<Class<?>, Object> getGuiceControllerFactory(){
Injector injector = Guice.createInjector(new GuiceModule());
return new Callback<Class<?>, Object>() {
@Override
public Object call(Class<?> clazz) {
return injector.getInstance(clazz);
}
};
}
}
Mein Guice Modul sieht wie folgt aus:
public class GuiceModule extends AbstractModule {
@Override
protected void configure() {
bind(ITester.class).to(Tester.class);
bind(ISecondTest.class).to(SecondTest.class);
}
}
Bitte beachten Sie, dass ich die Pfade für die Ressource ersetzt Bündel und die fxml-Datei, da sie meine Identität ergeben hätten. Aber laden und alles funktioniert, also sollte das kein Problem sein;)
Jetzt ist das Problem, dass ich eine neue Ansicht mit einem Klick in eine andere Ansicht instanziieren möchte. Die zweite Ansicht sollte eine detailliertere Version der Daten in Sicht 1 anzeigen. Alles, was ich an die zweite Ansicht übergeben muss, ist eine Ganzzahl (oder int), aber ich habe absolut keine Ahnung, wie das geht.
Ich habe den Standard-FX-Setup mit:
View.fxml (with a reference to the ViewController)
ViewController.java
Model.java
ViewModel.java
Die ViewController
bindet dann an Eigenschaften durch die ViewModel
angeboten. Ich brauche das Int, um das richtige Modell zu wählen.
Alles, was ich finden konnte, war über die Annotation @Named
, aber soweit ich sehen kann, wäre dies nicht verwendbar, um dynamische Daten zu injizieren.
Könnten Sie mir bitte einen Hinweis geben, was das, was ich tun möchte, heißt? Oder kurz gesagt: Wie kann ich eine Variable, ausgewählt von einer anderen Ansicht, in eine zweite ViewController
injizieren und den Rest in der Standard-FX-Weise lassen?
Jede Hilfe geschätzt und danke im Voraus!
Grüße, Christian