JavaFX Frage zum FX-Loader

top_chief

Mitglied
Hallo,
mir ist folgendes aufgefallen...

Code 1 (funktioniert nicht):
"normale" Klasse:

Code:
private SettingsController mController;

private void initStage() {
        
        mController = new SettingsController();
        mController.setSettings(this);
        mController.setMain(mMain);
        FXMLLoader loader = new FXMLLoader(getClass().getResource("/app/fmxl/settings.fxml"));
        //...
}

private void foo() {
        mController.updateFontSize();
}

Code 2 (funktioniert):
Code:
private FXMLLoader mLoader;

    private void initStage() {
        SettingsController controller = new SettingsController();
        controller.setSettings(this);
        controller.setMain(mMain);
        mLoader = new FXMLLoader(getClass().getResource("/app/fmxl/settings.fxml"));
}

private void foo() {
       SettingsController controller = mLoader.getController();
       controller.updateFontSize(); 
}

Kann es sein, dass das ganze daran liegt, dass ich in meinen Settings eine Tab-Pane habe und deswegen der Controller seinen Zustand (nach der jeweiligen "Auswahl") verändert? Würde ungern mit dem Debugger die Zustände prüfen :-/ so empirisch möchte ich dann doch nicht arbeiten :p

Gibt es irgendwo ein gutes Tutorial, oder ein Buch wo das mit dem Loader mal ausführlich erklärt ist? Oder findet sich hier jemand der mir die Funktionsweise des Loaders möglichst ausführlich erklären kann?

Ich habe schon unzählige Beitrage auf Stackoverflow durchgelesen, aber immer noch nicht das Gefüh, dass es "Klick" gemacht hat.

Danke vorab!
Martin
 

dzim

Top Contributor
Was wäre im Code-Beispiel 1 deine Erwartungshaltung?

Konkret läuft es in JavaFX im Zusammenhang mit FXMLs und Controllern so, dass im XML die Controllerklasse bekannt gegeben wird. Wenn du nun mit FXMLLoader eine FXML lädst, parst dieser die Datei und sieht "aha, er möchte einen Controller der Klasse X" und erstellt entsprechend eine Instanz davon. Die weiter im XML definierte UI wird dann über die @FXML-Anntotationen an den Controller übergeben, damit dieser damit interagieren kann, bzw. Zugriff darauf hat.

Ich kann dir nichts anderen empfehlen, als zum einen die JavaDoc des FXMLLoaders anzuschauen und vielleicht zum anderen die Tutorials von Oracle selbst zu studieren.
Also:
Warum sollte ich es nutzen?
Unterschiede von JavaFX 2 zu JAvaFX 8 (hier wird auf einige Sachen vom FXMLLoader eingegangen).
...
 

top_chief

Mitglied
Hallo dzim,
danke für deine Antwort. Ich glaube du hast mir damit schon sehr geholfen. Ganz sicher bin ich mir aber noch nicht, werde morgen mal ein kleines Testprogramm mit einer TabPane schreiben - habe gerade dort das Gefühl, dass Instanzen nicht geladen wurden (also dort in meinem Code verhältnismäßig viele Nullptrs entstehen)..

Wie trennst du deinen Code? Bzw. wann nutzt du die normale Klasse und wann den Controller?
Ich habe den Controller eigentlich nur in der Verwendung wenn der Nutzer (sehr) direkt mit der GUI interagiert (wahrscheinlich ist diese Beschreibung nicht wirklich aussagekräftig) onSliderChanged() oder onMouseMoved() wären typische Methoden, die ich im Controller abfrage. Aber insgesamt läuft es fast auf ein wildes Durcheinander heraus.
Habe aber auch schon FX-Code gesehen, der (wahrscheinlich) fast ausschließlich durch den Controller abgearbeitet wird... zB wird dort eine Scene mit folgendem Snippet mit Inhalt geladen:

Code:
class CustomerDialogController() {
  @FXML private Label customerName;
  void initialize() {}
  void initData(Customer customer) {
    customerName.setText(customer.getName());
  }
}
siehe hier ->dependency injection - Passing Parameters JavaFX FXML - Stack Overflow

Der Code dort erscheint mir als deutlich "schöner", aber irgendwie fehlt es mir an Wissen / Erfahrung, wie man eine Anwendung so sauber strukturiert. Hast du hierfür einen Tipp für mich?

Viele Grüße
Martin
 

dzim

Top Contributor
Um Ehrlich zu sein, ist das eine nicht ganz einfach zu beantwortende Frage. Leider.

Wenn du den MVVM-Model folgst, ist dein Gedanke, was du im Controller machen möchtest, absolut richtig. Bzw. dort löst du dann Aktionen ausen, die das ViewModel ändern, die dann wiederum am Model selbst Änderungen auslösen.
Auch wenn ich MVVM grundsätzlich gutheisse, bin ich trotz reichlich Erfahrung auch nie ganz sicher, wo man hier die konkrete Linie wischen den einzelnen Komponenten zieht.

Ich selbst würde es zu Teilen auch wie in dem verlinkten StackOverflow Beitrag machen. Bzw. würde über Dependency Injection (welcher Art auch immer) zum Beispiel Data Access Objects hineinreichen, so dass der Controller nicht wissen muss, wie etwas funktioniert, sondern nur weitere Aktionen auslöst...
Viel Bla Bla und vieles bleibt am Ende dir überlassen (z.B. welche Form von Dependency Injection du wählst - setter-Methoden, @Inject-annotierte Variablen (hier: welches Framework), etc.).

Da muss ich also sagen: Finde deinen Stil, der idealerweise auch gut von anderen Verstanden werden kann... :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Frage zum Schieberegler JSlider AWT, Swing, JavaFX & SWT 5
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 10
M Frage zu Java Bundesligaverwaltung AWT, Swing, JavaFX & SWT 7
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 9
E Frage zum Textfeld AWT, Swing, JavaFX & SWT 8
H Swing JMenu aufgeklappt oder nicht - Wie frage ich das ab? AWT, Swing, JavaFX & SWT 5
pkm Frage wegen java.lang.IllegalStateException bei DocumentListener AWT, Swing, JavaFX & SWT 4
D Frage zu ActionListenern und AvtionEvents AWT, Swing, JavaFX & SWT 2
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
F JavaFX Frage zum Logging AWT, Swing, JavaFX & SWT 6
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
ralfb1105 Swing Frage zu SwingWorker Verhalten bei cancel() AWT, Swing, JavaFX & SWT 2
J Frage zu setuserdata AWT, Swing, JavaFX & SWT 1
N Frage zu ListView AWT, Swing, JavaFX & SWT 11
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
J Event Handling Frage zu der Funktion addActionListener AWT, Swing, JavaFX & SWT 2
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
B drawRect Frage und Aufgabenstellung AWT, Swing, JavaFX & SWT 10
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
S Frage zu java.awt.EventQueue AWT, Swing, JavaFX & SWT 1
J Frage zu Java Projekt [2D Game] AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Frage zum Loggen von Fehlern AWT, Swing, JavaFX & SWT 3
T Swing API Frage zu Verzeichnisbäumen und JTree AWT, Swing, JavaFX & SWT 1
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q Cursor Frage AWT, Swing, JavaFX & SWT 8
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
H Taschenrechnerprojekt in Javafx - Frage zu den Buttons in FXML AWT, Swing, JavaFX & SWT 1
I Grundsätzliche Frage zu ItemListener AWT, Swing, JavaFX & SWT 11
X Kurze Frage zu JPopup AWT, Swing, JavaFX & SWT 3
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
D Frage zu JFrame und Graphics AWT, Swing, JavaFX & SWT 4
J Swing Frage zur Vorgehensweise (JTable?, JLabels?) AWT, Swing, JavaFX & SWT 8
S Frage zu Jtable / CellEditor AWT, Swing, JavaFX & SWT 1
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
N Swing JTable anfänger frage AWT, Swing, JavaFX & SWT 2
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
G noch eine Frage zum EventDispachThread AWT, Swing, JavaFX & SWT 4
D MVC Frage AWT, Swing, JavaFX & SWT 6
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Frage AWT, Swing, JavaFX & SWT 5
Luk10 g.drawString funktioniert nicht + Frage zur Text-Rendering Qualität AWT, Swing, JavaFX & SWT 7
Luk10 Frage zu Farb-Komposition AWT, Swing, JavaFX & SWT 9
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
V SWT Import Wizard - frage zur WizardPage AWT, Swing, JavaFX & SWT 5
N Swing Frage JXMapviewer AWT, Swing, JavaFX & SWT 4
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
lumo SWT Zeichnen bescheunigen bzw eine allg. Frage AWT, Swing, JavaFX & SWT 8
H Frage zu übergebenem Vector bzw. Boolean AWT, Swing, JavaFX & SWT 3
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
VfL_Freak Swing Frage zu "new JPasswordField( 10 )" AWT, Swing, JavaFX & SWT 6
H Frage zu WindowBuilder Pro AWT, Swing, JavaFX & SWT 3
C Frage/Problem mit Jpanel AWT, Swing, JavaFX & SWT 4
S Frage zu TextArea AWT, Swing, JavaFX & SWT 2
GUI-Programmer Zeichnen in Swing - Frage AWT, Swing, JavaFX & SWT 6
Luk10 Frage zu Mouseevents AWT, Swing, JavaFX & SWT 7
J Refreshing Swing Frage AWT, Swing, JavaFX & SWT 10
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
A Frage zu StringBuilder AWT, Swing, JavaFX & SWT 2
S allg. Frage zur GUI-Architektur AWT, Swing, JavaFX & SWT 5
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A Frage zur Methode matches() AWT, Swing, JavaFX & SWT 2
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
H Allgemeine Frage zu Grafikfähigkeiten von Java AWT, Swing, JavaFX & SWT 24
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
Jats Frage zu JLabel & JTextField AWT, Swing, JavaFX & SWT 4
Y frage zu BufferedImage AWT, Swing, JavaFX & SWT 7
hdi Swing Frage zu invokeAndWait() Exceptions AWT, Swing, JavaFX & SWT 8
P Swing Frage zu paintComponent/getGraphics AWT, Swing, JavaFX & SWT 4
M Frage nach Swing Element AWT, Swing, JavaFX & SWT 3
S Frage zu Graphics2D AWT, Swing, JavaFX & SWT 3
T AWT Frage zu AWT AWT, Swing, JavaFX & SWT 5
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
F unspezifizierte Frage zu JTable/ Model AWT, Swing, JavaFX & SWT 6
B SWT Frage zu MVC und Data-Binding AWT, Swing, JavaFX & SWT 8
T LookAndFeel Look and Feel Frage AWT, Swing, JavaFX & SWT 2
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
P Kurze Frage zur Gestaltung eines vertikalen Menüs AWT, Swing, JavaFX & SWT 2
Dit_ Frage zum Thema SwingUtilities.invokeLater AWT, Swing, JavaFX & SWT 5
Eldorado Frage zur Anwendung des MVC-Konzept AWT, Swing, JavaFX & SWT 33
G Frage zu processMouseEvent AWT, Swing, JavaFX & SWT 6
M Zoomen in ein JPanel... und eine andere kleine Frage AWT, Swing, JavaFX & SWT 3
D Swing implementierungs-technische Frage zu JList/AbstractListModel AWT, Swing, JavaFX & SWT 7
C Event Frage AWT, Swing, JavaFX & SWT 7
A Frage zu GridLayout AWT, Swing, JavaFX & SWT 4
F Frage zu WindowListeners AWT, Swing, JavaFX & SWT 2
E einfache Frage:warum ist Hintergrund grau ? AWT, Swing, JavaFX & SWT 24
E einfache Frage zu paintComponent und Graphics AWT, Swing, JavaFX & SWT 7
C Frage zu ActionListenern AWT, Swing, JavaFX & SWT 7
D Frage @ someActionEvent.getActionCommand() AWT, Swing, JavaFX & SWT 2
Kr0e Allgemeine Frage zu Java2D (Eigene Impl.) AWT, Swing, JavaFX & SWT 18
L Einfache Layout Frage für Applet -> Was mache ich bloss falsch? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben