Hallo zusammen,
bin noch relativ unerfahren mit JavaFX und habe ein Problem welches ich auch nach mehreren Stunden
googeln nicht gelöst bekommen habe, obwohl es eine Kleinigkeit sein muss
Ich habe in meiner Szene eine Splitpane, worin in der rechten Seite eine AnchorPane ("outputArea")
ist. Für diese Pane habe ich mehrere FXML Files und jeweils eigene Controller dazu.
Genau diese AnchorPane "outputArea" möchte ich über Buttons in der linken Seite der Splitpane umschalten.
Das funktioniert auch bei allen einwandfrei, aber nicht wenn ich mit einem Button innerhalb einer der versch.
Pages in der outputArea umschalten will.
Hier der relevante Auszug des Controllers des MainWindows:
[CODE lang="java" title="MainWindowController"]public class ControllerMainWindow {
//** Panes
@FXML
private AnchorPane outputArea;
// ----------ÜBER DIESEN BUTTON FUNKTIONIERT ES!-----
public void stoerungenAction(ActionEvent actionEvent) throws IOException {
//Main.showMainPage();
FXMLLoader loader = new FXMLLoader(Main.class.getResource("MainWindow_MaschinenDaten.fxml"));
Parent outputPage = loader.load();
ControllerPageMaschinendaten controllerPageMaschinendaten = loader.getController();
//Anchorpane anpassen sodass outputPage sich der Größe von Parent anpasst
outputArea.getChildren().removeAll();
outputArea.getChildren().add(outputPage);
AnchorPane.setTopAnchor(outputPage, 0.0);
AnchorPane.setBottomAnchor(outputPage, 0.0);
AnchorPane.setLeftAnchor(outputPage, 0.0);
AnchorPane.setRightAnchor(outputPage, 0.0);
System.out.println("testüberLeiste");
System.out.println(outputArea);
System.out.println(outputPage);
}
public void maschDatenAction(int maschinenID) throws IOException {
FXMLLoader loader = new FXMLLoader(Main.class.getResource("MainWindow_MaschinenDaten.fxml"));
Parent outputPage = loader.load();
ControllerPageMaschinendaten controllerPageMaschinendaten = loader.getController();
//Anchorpane anpassen sodass outputPage sich der Größe von Parent anpasst
outputArea.getChildren().clear();
outputArea.getChildren().add(outputPage);
AnchorPane.setTopAnchor(outputPage, 0.0);
AnchorPane.setBottomAnchor(outputPage, 0.0);
AnchorPane.setLeftAnchor(outputPage, 0.0);
AnchorPane.setRightAnchor(outputPage, 0.0);
System.out.println("test Maschinen ID: " + maschinenID);
System.out.println(outputArea);
System.out.println(outputPage);
//outputArea.getChildren().clear();
//controllerPageMaschinendaten.machiwas();
}
}[/CODE]
Hier der relevante Teil aus dem Controller der geladenen Page in der outputArea:
[CODE lang="java" title="Controller der Unterseite"]public class ControllerPageMaschinenpark {
@FXML
private FlowPane fpMaschinen;
private Button[] btnMaschinen;
public void showMaschinen(){
ArrayList<Maschine> maschinenPark = Main.getMaschinenPark();
int i=1;
int anzMaschinen = Main.getMaschinenPark().size();
btnMaschinen = new Button[anzMaschinen+1];
VBox[] vBoxBtn = new VBox[anzMaschinen+1];
Label[] lblMaschinenID = new Label[anzMaschinen+1];
Label[] lblMaschinenBez = new Label[anzMaschinen+1];
ProgressBar[] prgBarMasch = new ProgressBar[anzMaschinen+1];
...
//Button Action wenn Maschine geklickt wird
for(int j=1; j<= anzMaschinen; j++)
{
btnMaschinen[j].setOnAction(e-> {
String test = ((Button) e.getSource()).getId();
System.out.println(test);
//Controller von MainWindow holen
FXMLLoader loader = new FXMLLoader(Main.class.getResource("MainWindow.fxml"));
try {
loader.load();
ControllerMainWindow controllerMainWindow = loader.getController();
String maschinenID = ((Button) e.getSource()).getId();
controllerMainWindow.maschDatenAction(Integer.parseInt(maschinenID));
} catch (IOException ex) {
ex.printStackTrace();
}
});
}
}
}[/CODE]
Hier noch ein Bild des GUI für die verständlichkeit:

Die Testdaten der Methode "maschDatenAction" werden ausgegeben, das heißt er schafft es bis dorthin.
Nur will die outputArea nicht aktualisiert werden
Wenn ich es bspw. über den Button "Störungen" in der Leiste links mache geht es! (selber Code Copy&Paste in ActionEvent Methode).
Ich hoffe jmd sieht den Fehler auf anhieb und kann mir weiterhelfen!
Vielen Dank vorab!
Gruß Simon
bin noch relativ unerfahren mit JavaFX und habe ein Problem welches ich auch nach mehreren Stunden
googeln nicht gelöst bekommen habe, obwohl es eine Kleinigkeit sein muss
Ich habe in meiner Szene eine Splitpane, worin in der rechten Seite eine AnchorPane ("outputArea")
ist. Für diese Pane habe ich mehrere FXML Files und jeweils eigene Controller dazu.
Genau diese AnchorPane "outputArea" möchte ich über Buttons in der linken Seite der Splitpane umschalten.
Das funktioniert auch bei allen einwandfrei, aber nicht wenn ich mit einem Button innerhalb einer der versch.
Pages in der outputArea umschalten will.
Hier der relevante Auszug des Controllers des MainWindows:
[CODE lang="java" title="MainWindowController"]public class ControllerMainWindow {
//** Panes
@FXML
private AnchorPane outputArea;
// ----------ÜBER DIESEN BUTTON FUNKTIONIERT ES!-----
public void stoerungenAction(ActionEvent actionEvent) throws IOException {
//Main.showMainPage();
FXMLLoader loader = new FXMLLoader(Main.class.getResource("MainWindow_MaschinenDaten.fxml"));
Parent outputPage = loader.load();
ControllerPageMaschinendaten controllerPageMaschinendaten = loader.getController();
//Anchorpane anpassen sodass outputPage sich der Größe von Parent anpasst
outputArea.getChildren().removeAll();
outputArea.getChildren().add(outputPage);
AnchorPane.setTopAnchor(outputPage, 0.0);
AnchorPane.setBottomAnchor(outputPage, 0.0);
AnchorPane.setLeftAnchor(outputPage, 0.0);
AnchorPane.setRightAnchor(outputPage, 0.0);
System.out.println("testüberLeiste");
System.out.println(outputArea);
System.out.println(outputPage);
}
public void maschDatenAction(int maschinenID) throws IOException {
FXMLLoader loader = new FXMLLoader(Main.class.getResource("MainWindow_MaschinenDaten.fxml"));
Parent outputPage = loader.load();
ControllerPageMaschinendaten controllerPageMaschinendaten = loader.getController();
//Anchorpane anpassen sodass outputPage sich der Größe von Parent anpasst
outputArea.getChildren().clear();
outputArea.getChildren().add(outputPage);
AnchorPane.setTopAnchor(outputPage, 0.0);
AnchorPane.setBottomAnchor(outputPage, 0.0);
AnchorPane.setLeftAnchor(outputPage, 0.0);
AnchorPane.setRightAnchor(outputPage, 0.0);
System.out.println("test Maschinen ID: " + maschinenID);
System.out.println(outputArea);
System.out.println(outputPage);
//outputArea.getChildren().clear();
//controllerPageMaschinendaten.machiwas();
}
}[/CODE]
Hier der relevante Teil aus dem Controller der geladenen Page in der outputArea:
[CODE lang="java" title="Controller der Unterseite"]public class ControllerPageMaschinenpark {
@FXML
private FlowPane fpMaschinen;
private Button[] btnMaschinen;
public void showMaschinen(){
ArrayList<Maschine> maschinenPark = Main.getMaschinenPark();
int i=1;
int anzMaschinen = Main.getMaschinenPark().size();
btnMaschinen = new Button[anzMaschinen+1];
VBox[] vBoxBtn = new VBox[anzMaschinen+1];
Label[] lblMaschinenID = new Label[anzMaschinen+1];
Label[] lblMaschinenBez = new Label[anzMaschinen+1];
ProgressBar[] prgBarMasch = new ProgressBar[anzMaschinen+1];
...
//Button Action wenn Maschine geklickt wird
for(int j=1; j<= anzMaschinen; j++)
{
btnMaschinen[j].setOnAction(e-> {
String test = ((Button) e.getSource()).getId();
System.out.println(test);
//Controller von MainWindow holen
FXMLLoader loader = new FXMLLoader(Main.class.getResource("MainWindow.fxml"));
try {
loader.load();
ControllerMainWindow controllerMainWindow = loader.getController();
String maschinenID = ((Button) e.getSource()).getId();
controllerMainWindow.maschDatenAction(Integer.parseInt(maschinenID));
} catch (IOException ex) {
ex.printStackTrace();
}
});
}
}
}[/CODE]
Hier noch ein Bild des GUI für die verständlichkeit:

Die Testdaten der Methode "maschDatenAction" werden ausgegeben, das heißt er schafft es bis dorthin.
Nur will die outputArea nicht aktualisiert werden
Wenn ich es bspw. über den Button "Störungen" in der Leiste links mache geht es! (selber Code Copy&Paste in ActionEvent Methode).
Ich hoffe jmd sieht den Fehler auf anhieb und kann mir weiterhelfen!
Vielen Dank vorab!
Gruß Simon