JavaFX JavaFX - Scene Builder - BorderPane

Hendrik-HP

Mitglied
Hallo Community,

ich (Anfänger) hoffe ich bin hier richtig und Ihr könnt mir helfen. Nach zwei Tagen recherchieren hab ich leider keine passende Lösung gefunden (oder ich verstehe die Erklärungen einfach nicht). Deshalb frag ich mal hier.

Folgendes Szenario:

Ich habe in meiner Main Stage ein BorderPane und im Center ein GridPane mit 4 Controls.

Nun möchte ich per Button ein anderes FXML Dokument im Center anzeigen lassen und dieses nicht in einem extra Fenster (GridPane soll dann ausgetauscht werden) während die Menüleisten bleiben sollen.

Wie kann ich das realisieren?

Muss ich das FXML Dokument als Scene erstellen und wie kann ich es dann einbinden oder kann ich das Dokument ganz normal als z.B. TabPane erstellen ohne Scene als Parent und dies dann mit setCenter einbinden?

Ich hoffe ich konnte es gut erklären.

Gruß
Hendrik
 

Anhänge

  • Bildschirmfoto 2020-10-04 um 16.38.11.png
    Bildschirmfoto 2020-10-04 um 16.38.11.png
    1,2 MB · Aufrufe: 105
  • Bildschirmfoto 2020-10-04 um 16.38.36.png
    Bildschirmfoto 2020-10-04 um 16.38.36.png
    871,7 KB · Aufrufe: 65
Ist an sich umsetzbar.

Wo hängt es bei dir?

Code:
button.setOnAction(e -> borderPane.setCenter(fxmlPane)
);
 
Zuletzt bearbeitet:
Hallo Iam_tr,

es hängt hauptsächlich bei ner IOException. Hab deinen Tipp mal übernommen. Hoffentlich richtig auch wenn nicht mit nem Lambda Ausdruck:

Java:
//Implementierung BorderPane (Scene Builder)
@FXML
private BorderPane borderPane;

//Button Action
@FXML
void btnBookingsAction(ActionEvent event) throws IOException{
    borderPane.setCenter(FXMLLoader.load(getClass().getResource("statisticsScene.fxml")));
}

Bei der Ausführung bekomme ich dann folgende Exceptions:
- Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
- at program.fxmlScenes.MainSceneController.btnBookingsAction(MainSceneController.java:84)

(Das sind mal nur 2 der vielen Zeilen. Zeile 84 in der Exception ist der setCenter Befehl im Button)
Bis jetzt hab ich im Netz nur den Fehler im Bezug mit Websites gefunden.
Hab ich da noch was vergessen zu schreiben oder hab ich was übersehen?
Hat es was damit zu tun, das der setCenter Befehl ein Node haben will und das FXML Dokument meines anfänglichen Wissens nach eine Scene ist?

Gruß
Hendrik
 
Wie sieht denn die fxml Datei aus? So wie es im SceneBuilder aussieht hast Du da eine Scene als root node, stimmt das?

Falls ja, lösche die Scene und nimm als root node nur TabPane, dann sollte es klappen.
 
Bei der Ausführung bekomme ich dann folgende Exceptions:
- Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
- at program.fxmlScenes.MainSceneController.btnBookingsAction(MainSceneController.java:84)

(Das sind mal nur 2 der vielen Zeilen. Zeile 84 in der Exception ist der setCenter Befehl im Button)
Zeig mal den Rest der Fehlermeldung, der interessante Teil (der Grund der InvocationTargetException) kommt erst später 🙂
 
Hallo Iam_tr,

es hängt hauptsächlich bei ner IOException. Hab deinen Tipp mal übernommen. Hoffentlich richtig auch wenn nicht mit nem Lambda Ausdruck:

Java:
//Implementierung BorderPane (Scene Builder)
@FXML
private BorderPane borderPane;

//Button Action
@FXML
void btnBookingsAction(ActionEvent event) throws IOException{
    borderPane.setCenter(FXMLLoader.load(getClass().getResource("statisticsScene.fxml")));
}

Bei der Ausführung bekomme ich dann folgende Exceptions:
- Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
- at program.fxmlScenes.MainSceneController.btnBookingsAction(MainSceneController.java:84)

(Das sind mal nur 2 der vielen Zeilen. Zeile 84 in der Exception ist der setCenter Befehl im Button)
Bis jetzt hab ich im Netz nur den Fehler im Bezug mit Websites gefunden.
Hab ich da noch was vergessen zu schreiben oder hab ich was übersehen?
Hat es was damit zu tun, das der setCenter Befehl ein Node haben will und das FXML Dokument meines anfänglichen Wissens nach eine Scene ist?

Gruß
Hendrik
Kann es vielleicht sein dass deine staticsScene.fxml nicht gefunden werden kann? Liegt die im Root Verzeichnis deines Classpaths?
 
@sascha-sphw:
ich hatte es auch schonmal testweise mit einer Scene als Grundelement probiert hat aber auch nicht geklappt. Nun nutze ich eigentlich nur Panes (Grid/Border etc) als root Element

@mrBrown:
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1862)
at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1729)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics/javafx.scene.Node.fireEvent(Node.java:8886)
at javafx.controls/javafx.scene.control.Button.fire(Button.java:203)
at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:208)
at javafx.controls/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3856)
at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1851)
at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2584)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446)
at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556)
at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942)
at javafx.graphics/com.sun.glass.ui.mac.MacView.notifyMouse(MacView.java:127)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76)
at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:273)
at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83)
at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1857)
... 40 more
Caused by: java.lang.NullPointerException: Location is required.
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3316)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3280)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3249)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3222)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3199)
at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3192)
at program.fxmlScenes.MainSceneController.btnBookingsAction(MainSceneController.java:84)
... 51 more

@lam_tr:
alle FXML Dokumente liegen in einem Package. Hänge mal ein Screenshot mir dran. Ich kann so als neues Fenster auch auf alle Dokumente zugreifen und öffnen. Nur ein FXML Dokument im BorderPane anzeigen lassen kriege ich noch nicht hin...
 

Anhänge

  • Bildschirmfoto 2020-10-07 um 18.49.05.png
    Bildschirmfoto 2020-10-07 um 18.49.05.png
    1,6 MB · Aufrufe: 63
soooo,
gesagt getan. Schreibfehler aus der FXMLDatei entfernt (tatsächlich ein 's' zuviel im Code), gefreut - Fehler gefunden, neu probiert, trotzdem nicht geklappt. Habe mir auch mal durch IntelliJ den Path kopiert (root Path, source Path...) also ohne Schreibfehler. Klappt aber beim besten Willen nicht.
Kann es vielleicht sein, das ich den ersten Center Content beim Laden auch als eigene FXML Datei einfügen muss unter Initialize und ihn Dann erst ersetzen kann? (also FXML durch FXML tauschen)
 
Auch wieder dieselbe:

Caused by: java.lang.NullPointerException: Location is required.
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3316)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3280)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3249)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3222)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3199)
at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3192)
at program.fxmlScenes.MainSceneController.btnBookingsAction(MainSceneController.java:84)
... 51 more
 
Dann ist irgendwas immer noch nicht ganz korrekt, was gibt System.out.println(getClass().getResource("statisticScene.fxml")) aus?
Und was gibt System.out.println(getClass()) aus?
 
In der Main Klasse:
class program.Main --- (System.out.println(getClass()))
null --- (System.out.println(getClass().getResource("statisticScene.fxml")))

wieso zum Teufel gibt der null aus? Hat doch Werte???
Gut der Controller noch nicht aber die FXML Datei. Und importiert ist auch alles...

Java:
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>

<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/11.0.1" fx:controller="program.fxmlScenes.StatisticSceneController">
  <columnConstraints>
    <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
    <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
  </columnConstraints>
  <rowConstraints>
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
  </rowConstraints>
   <children>
      <Label text="setCenter Test erfolgreich :)" />
   </children>
</GridPane>

Java:
package program.fxmlScenes;

public class StatisticSceneController {
}
 
System.out.println(getClass()); :
class program.fxmlScenes.MainSceneController

System.out.println(getClass().getResource("statisticScene.fxml")); :
file:/Users/Hendrik/Library/Mobile%20Documents/com~apple~CloudDocs/Programmieren/Java/IntelliJ%20IDEA%20-%20Projekte/MoneyManager/out/production/MoneyManager/program/fxmlScenes/statisticScene.fxml
 
@sascha-sphw:
ich hatte es auch schonmal testweise mit einer Scene als Grundelement probiert hat aber auch nicht geklappt. Nun nutze ich eigentlich nur Panes (Grid/Border etc) als root Element

@mrBrown:
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1862)
at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1729)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics/javafx.scene.Node.fireEvent(Node.java:8886)
at javafx.controls/javafx.scene.control.Button.fire(Button.java:203)
at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:208)
at javafx.controls/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3856)
at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1851)
at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2584)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446)
at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556)
at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942)
at javafx.graphics/com.sun.glass.ui.mac.MacView.notifyMouse(MacView.java:127)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76)
at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:273)
at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83)
at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1857)
... 40 more
Caused by: java.lang.NullPointerException: Location is required.
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3316)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3280)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3249)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3222)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3199)
at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3192)
at program.fxmlScenes.MainSceneController.btnBookingsAction(MainSceneController.java:84)
... 51 more

@lam_tr:
alle FXML Dokumente liegen in einem Package. Hänge mal ein Screenshot mir dran. Ich kann so als neues Fenster auch auf alle Dokumente zugreifen und öffnen.

Caused by: java.lang.NullPointerException: Location is required.

Das ist eben das was ich vermutet habe. Die FXML kann nicht gefunden werden. Ich habe es mir so angewohnt, auch wenn der Controller relativ zur FXML liegt den kompletten Package Pfad mit anzugeben


Hier wäre es dann
Code:
@FXML
void btnBookingsAction(ActionEvent event) throws IOException{
    borderPane.setCenter(FXMLLoader.load(getClass().getResource("/program/fxmlScenes/statisticsScene.fxml")));
}

Übrigens so wie ich es kenne schreibt man package namen komplett klein.

Grüße
lam
 
Es klappt! Tatsächlich es klappt. 1000 Dank! 😀

Hier mein funktionierender Code von lam_tr:
Java:
@FXML
void btnBookingsAction(ActionEvent event) throws IOException{
    borderPane.setCenter(FXMLLoader.load(getClass().getResource("/program/fxmlScenes/statisticScene.fxml")));
}

Tatsächlich musste ich den Path ab meinem program Ordner angeben (kleines Wort, große Wirkung). Nun tauscht er den Center Part der BorderPane aus. Allerdings ist mir aufgefallen, das ich die "Startseite" neu designen muss. Ich habe im Moment die Buttonleisten (BorderPane left und top) INKL dem Grid im Center in einer Datei. Wie schon gedacht muss ich den anfänglichen Inhalt des Centers (GridPane mit den 4 Chart-Controls) seperat aus einer extra FXML Datei initialisieren denn beim Zurückwechseln werden mir die Buttons doppelt überlagert da sie ja mit in der FXML Datei liegen. Kein Problem, ich weiß ja jetzt wie es geht und worauf ich achten muss 😎
Der eine Großgeschriebene Ordner ist jetzt auch klein geschrieben.

Danke an alle und eure Mühe 😉
 
Es klappt! Tatsächlich es klappt. 1000 Dank! 😀

Hier mein funktionierender Code von lam_tr:
Java:
@FXML
void btnBookingsAction(ActionEvent event) throws IOException{
    borderPane.setCenter(FXMLLoader.load(getClass().getResource("/program/fxmlScenes/statisticsScene.fxml")));
}

Tatsächlich musste ich den Path ab meinem program Ordner angeben (kleines Wort, große Wirkung). Nun tauscht er den Center Part der BorderPane aus. Allerdings ist mir aufgefallen, das ich die "Startseite" neu designen muss. Ich habe im Moment die Buttonleisten INKL dem Grid im Center in einer Datei. Wie schon gedacht muss ich den anfänglichen Inhalt des Centers (GridPane mit den 4 Chart-Controls) seperat initialisieren denn beim Zurückwechseln werden mir die Buttons doppelt überlagert da sie ja mit in der FXML Datei liegen.
Der eine Großgeschriebene Ordner ist jetzt auch klein geschrieben.

Danke an alle und eure Mühe 😉
An sich kannst du auch ein StackPane benutzen, der die erste und die zweite Pane enthält. Beim Button klick, soll die zweite nach vorne gebracht werden
Code:
pane2.toFront();
und wenn du die erst haben willst analog dazu
Code:
pane1.toFront();

Code:
stackpane.getChildren().add(pane1);
stackpane.getChildren().add(pane2);
borderpane.setCenter(stackpane);

anstatt immer nur das Center zu setzen.

Grüße
lam
 
Ja das ist mal ein klasse Tip!
Hab es auch gerade mal mit zwei TestLabel und Button ausprobiert. Mir wird nur leider auch das Label des ersten Grids unter dem Zweiten angezeigt (sichtbar). Wie kriege ich das noch weg? Hab es mal mit pane1.setVisible(true) getestet hat leider nicht geklappt.

Zur Not bleibe ich erst noch beim Center Wechsel damit ich einfach mal was funktionierendes fertig kriege. Ist vielleicht nicht ganz "sauber" aber zum Lernen reicht das denke ich.
 
Ja das ist mal ein klasse Tip!
Hab es auch gerade mal mit zwei TestLabel und Button ausprobiert. Mir wird nur leider auch das Label des ersten Grids unter dem Zweiten angezeigt (sichtbar). Wie kriege ich das noch weg? Hab es mal mit pane1.setVisible(true) getestet hat leider nicht geklappt.

Zur Not bleibe ich erst noch beim Center Wechsel damit ich einfach mal was funktionierendes fertig kriege. Ist vielleicht nicht ganz "sauber" aber zum Lernen reicht das denke ich.
Du muss jede Pane mit Background color setzen. Das kannst du hiermit erreichen pane.setStyle("-fx-background-color: white");
 
Hier mein funktionierender Code von lam_tr:
Java:
@FXML
void btnBookingsAction(ActionEvent event) throws IOException{
    borderPane.setCenter(FXMLLoader.load(getClass().getResource("/program/fxmlScenes/statisticScene.fxml")));
}

Tatsächlich musste ich den Path ab meinem program Ordner angeben (kleines Wort, große Wirkung).

Wenn die aktuell Klasse in dem Package program.fxmlScenes liegt, sind

Java:
getClass().getResource("/program/fxmlScenes/statisticScene.fxml")
und
Java:
getClass().getResource("statisticScene.fxml")
äquivalent.
Ich würde irgendwo anders noch 'nen Fehler vermuten, irgendwas z.B. nicht neu gebaut o.ä.


BTW: statt getClass() sollte man immer direkt die Klasse nutzen, also z.B. MainSceneController.class. this.getClass kann sich ändern, zB wenn das Framework Subklassen on the fly erstellt, womit das ganze potentiell bricht (JavaFX macht das afaik aber nicht, oder?).
 
@lam_tr:
es hat natürlich mit CSS funktioniert. Jetzt wird nichts überlagert. Danke 😀

@mrBrown:
ja, alle Klassen und FXML Files sind in einem Package. Auch nichts verschoben oder umbenannt, auch nicht über Refactor. Alles im Package erstellt. Deswegen ja das komische, das Fenster ohne Problem auch mit diesem (kurzen) Aufruf geöffnet werden. Subklassen hab ich so keine. Den Code für die getClass werde ich mir einprägen 😀
 

Neue Themen


Zurück
Oben