Instanz von FXMLDocumentController erlangen

hk

Bekanntes Mitglied
Hallo Forum,
ich versuche mich in JavaFX und lande bei folgenden Problem:
Ich habe in “FXMLDocumentController.java” ein GridPane und eine Methode welche die Farbe eines Grid-Elements ändern soll. Diese Methode möchte ich aus der main-Klasse ansprechen. Das geht aber nicht, weil ich die Instanz der FXMLDocumentController Klasse nicht bekomme.
Daher meine Frage: Gibt es eine Möglichkeit diese Instanz in der main-Klasse zu eruieren?
lg heinz

PS: Ich habe mir das MainWithControllerFactory.java Beispiel angesehen, sehe aber nicht wie ich das anwenden soll.
 

looparda

Top Contributor
Wenn du dein FXML mit dem FXMLLoader lädst bekommst du doch die Referenz auf den Controller. Oder auf welche Weise lädst du deine Views?
 

hk

Bekanntes Mitglied
Hallo looparda,
danke für die Blitzantwort.
mein FXMLLoader sieht so aus:
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
} //end start -------------------------------
Daraus ersehe ich nicht wie ich den Controller ansprechen soll?
lg heinz
 

looparda

Top Contributor
Wenn du mit
Java:
FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDocument.fxml"));
anfängst siehst du es vielleicht eher.
 

hk

Bekanntes Mitglied
Ich habe nun eine Lösung (aus einem Beispiel) gefunden. Aber ich bin mir nicht sicher ob das mit einer zusätzliche Klasse der optimale Weg ist?
Java:
    @Override
    public void start(Stage stage) throws Exception {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDocument.fxml"));
        loader.setController(Verbinder.controller);
        loader.load();
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
      
}           //end start -------------------------------

public class Verbinder {
    public static FXMLDocumentController controller = new FXMLDocumentController();
}
 

looparda

Top Contributor
Ich dachte an sowas
Java:
package fxmlloader;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.io.IOException;

public class FxmlLoaderTest extends Application {

    @Override public void start(Stage stage) throws IOException {

        FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDocument.fxml"));
        Parent root = loader.load();
        MyController ctrl = loader.getController();
        ctrl.handleButtonAction();
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] parameters) {
        launch(parameters);
    }
}

Code:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.111" fx:controller="fxmlloader.MyController">
    <children>
        <Button fx:id="button" layoutX="126" layoutY="90" onAction="#handleButtonAction" text="Click Me!" />
        <Label fx:id="label" layoutX="126" layoutY="120" minHeight="16" minWidth="69" />
    </children>
</AnchorPane>

Java:
package fxmlloader;

import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;


public class MyController {

    private int counter;

    @FXML
    Button button;

    @FXML
    Label label;

    public void handleButtonAction() {
        label.setText("clicked " + ++counter);
    }
}
 

hk

Bekanntes Mitglied
Ja, danke. Das funktioniert nun aber die Instanz hält sich nicht lange. Ich versuche den Ablauf darzustellen:
Main-Klasse
- start Methode: Instanz holen und speichern (fxml), Aufruf der GUI-Initialisierung fxml.ladeGebietsdaten(this).
- FXML-Controller-Klasse: Instanz von Main-Klasse speichern (demo), Init durchführen.
- FXML-Controller-Klasse: handleButtonAction(), Aufruf demo.startDemo().
- Main-Klasse startDemo(), Aufruf fxml.setNodeFarbe !! und hier ist fxml null ??

Java:
   public static FXMLDocumentController fxml;
        @Override
    public void start(Stage stage) throws Exception {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDocument.fxml"));
        Parent root = loader.load();
        FXMLDocumentController fxml = loader.getController();
().getResource("FXMLDocument.fxml"));
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
         fxml.ladeGebietsDaten(this);    //eigene Instanz für beidseitige Verbindung
    }           //end start -------------------------------

    public void startDemo() {
        // Start- und Ziel-Node einfärben
        Node node = nodeListe.get(startNode);
        fxml.setNodeFarbe(node.getLabel(), 0); //fxml = null
FXMLDocumentController
Code:
    AStarDemo demo;
   
    /**
     * Eingaben prüfen und Hauptprogramm aufrufen
     * @param event
     */
    @FXML
    public void handleButtonAction(ActionEvent event) {
         //
         // Wegsuche kann gestartet werden
        demo.startDemo();
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
KrokoDiehl JavaFX Gleiche Controller-Instanz für inludiertes FXML AWT, Swing, JavaFX & SWT 1
G Anonyme Instanz von JXImageView erstellen und mit Bild initialisieren AWT, Swing, JavaFX & SWT 7
R Eine Instanz von JPanel mehrfach hinzufügen AWT, Swing, JavaFX & SWT 2
R Instanz einer Subklsse von JPanel wird nicht angezeigt. AWT, Swing, JavaFX & SWT 15
xehpuk Swing NullPointerException: Random-Instanz anfangs nicht initialisiert AWT, Swing, JavaFX & SWT 4
B Swing JPanel in Abhängigkeit von DefaultListModel Instanz neu zeichnen AWT, Swing, JavaFX & SWT 3
B Instanz einer abstrakten Klasse AWT, Swing, JavaFX & SWT 3
D Zugriff auf Instanz der GUI AWT, Swing, JavaFX & SWT 3
J Swing Eine(und zwar ein und die selbe) WindowListener Instanz für alle JFrames AWT, Swing, JavaFX & SWT 8
S initialnamen einer swing instanz zur laufzeit ändern AWT, Swing, JavaFX & SWT 5
raptorrs Swing MouseListener reagiert nicht auf Instanz einer JTable AWT, Swing, JavaFX & SWT 6
K Instanz von JEditorPane starten AWT, Swing, JavaFX & SWT 3
T statische Variable zum Referenzieren einer Instanz von Frame AWT, Swing, JavaFX & SWT 3
W Instanz eines Steuerelementes an zwei Stellen zeichnen AWT, Swing, JavaFX & SWT 3
K Bild in neuer InternetExplorer - Instanz öffnen AWT, Swing, JavaFX & SWT 3
M sicherstellen, dass nur eine Instanz läuft. AWT, Swing, JavaFX & SWT 6
S In Instanz von JTextArea schreiben AWT, Swing, JavaFX & SWT 4
S int-berechnung des RGB-Wertes ohne neue Instanz? AWT, Swing, JavaFX & SWT 9
H JFileChooser und Class Instanz AWT, Swing, JavaFX & SWT 2
H Neue Instanz einer Klasse bei JButton-Klick AWT, Swing, JavaFX & SWT 5
M Es bleibt immer noch eine Javaw instanz zurück AWT, Swing, JavaFX & SWT 3
D JavaFX Zugriff auf Controller erlangen AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben