Scene wechseln über ManuItem

Tintenfisch

Bekanntes Mitglied
Hey, ich habe zwei FXML Dateien erstellt und würde gerne über ein MenuItem die Scene wechseln. Wenn die onAction Methode auf einen Button gelegt ist, funktioniert dies auch. Möchte ich dies aber über ein Menu Item steuern, bekomme ich bei dem selben Code den Fehler, dass diese Stage null sei. Anbei meine Controller Class. Schonmal vielen dank fürs Reinschauen :)

Java:
public class Controller implements Initializable {
    
    @FXML
    private MenuBar menuBar1;
    private Stage stage;
    private Scene scene;
    private Parent root;
        
    @FXML // funktioniert nur über Button, nicht aber über Menu Item
    public void toMainScene (ActionEvent event) throws IOException {
        root = FXMLLoader.load(getClass().getResource("Main.fxml"));
        stage = (Stage) menuBar1.getScene().getWindow(); // satage is null
        scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }
    
    @FXML // funktioniert
    public void toInputScene (ActionEvent event) throws IOException {
        root = FXMLLoader.load(getClass().getResource("Input.fxml"));
        stage = (Stage)((Node)event.getSource()).getScene().getWindow();
        scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }

    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {
        // TODO Auto-generated method stub
    }
}
 
Y

yfons123

Gast
warum hast du überhaupt 2 stages?

nimm halt deine alte und setz da eine neue szene rein und gut is
ansonsten standard debugging

die menuitems haben ansich probleme mit szenen wechsel ( weil nach mr brown die mnemonics nicht aufgeräumt werden.. was auch immer das heißt ) dh du musst beim menu erst .hide() aufrufen und dann die szene wechseln
 

Tintenfisch

Bekanntes Mitglied
@KonradN
Ja, menuBar1 ist Bestandteil der Scene, in welcher auf das Menu Item geklickt werden soll. Der Fehler wird genau genommen für Zeile 14 angegeben. Es soll eine java.lang.RuntimeException sein, welche später durch "java.lang.NullPointerException: Cannot invoke "javafx.stage.Stage.setScene(javafx.scene.Scene)" because "this.stage" is null". begründet wird.
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Ok, das Problem, wieso Du da null bekommst, kann ich nicht ganz nachvollziehen, denn ich bekomme da durchaus einen Wert (JavaFX 17.0.2) aber der ist nicht die gesuchte Stage.

Ich habe da mal gerade etwas geschaut (ich mache selbst zu wenig JavaFX - daher musste ich selbst erst nachsehen) und halt gesehen, dass es ein getOwnerWindow gibt, das man aufrufen kann. Das wäre dann ein Konstrukt wie:

((MenuItem)event.getSource()).getParentPopup().getOwnerWindow()
um an die Stage zu kommen.

Das Problem ist, dass das Menu in einem ContextMenu dargestellt wird. Das getParentPopup gibt also das ContextMenu zurück. Und darin ist eine eigens dafür gebaute Scene (und nicht deine) und ein getWindow auf dieser Scene würde auch nur wieder das ContextMenu zurück geben.

Die MenuBar sollte aber in der Scene selbst sein. Und bei meinen Tests, die ich auf die Schnelle erstellt habe, konnte ich über die MenuBar auch an die Stage kommen. Also wird da mit dieser MenuBar Instanz etwas nicht ganz stimmen - was genau kann ich aber nicht sagen. Evtl. machst Du da im Code noch etwas mit? Oder wie sieht deine fxml aus? Oder Du machst es mit dem ActionEvent wie gezeigt :)
 

Tintenfisch

Bekanntes Mitglied
Ok, das Problem, wieso Du da null bekommst, kann ich nicht ganz nachvollziehen, denn ich bekomme da durchaus einen Wert (JavaFX 17.0.2) aber der ist nicht die gesuchte Stage.
[...] Evtl. machst Du da im Code noch etwas mit? Oder wie sieht deine fxml aus? Oder Du machst es mit dem ActionEvent wie gezeigt :)
Vielen Dank schonmal für die Mühe :)
Im Code ist die Manu Bar soweit unberührt, ich hänge nochmal die FXML an, womit an sich auch noch nicht so viel passiert ist.
Sollte ich die selbe setOnAction Methode über einen normalen Button bedienen, funktioniert diese bei mir soweit.
XML:
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller">
   <top>
      <MenuBar id="menuBar" fx:id="menuBar1" BorderPane.alignment="CENTER">
        <menus>
          <Menu mnemonicParsing="false" onAction="#toMainScene" text="menuBar">
            <items>
              <MenuItem mnemonicParsing="false" onAction="#toMainScene" text="Close" />
            </items>
          </Menu>
          <Menu mnemonicParsing="false" text="Input">
            <items>
              <MenuItem mnemonicParsing="false" text="Delete" />
            </items>
          </Menu>
        </menus>
      </MenuBar>
   </top>
   <center>
      <DatePicker BorderPane.alignment="CENTER" />
   </center>
   <left>
      <Button mnemonicParsing="false" onAction="#toMainScene" text="Button" BorderPane.alignment="CENTER" />
   </left>
</BorderPane>
 

KonradN

Super-Moderator
Mitarbeiter
Was mir auffällt: Du hast zwei mal die Action drin! Das wird also ggf. doppelt ausgeführt. Beim zweiten Mal wäre dann die Scene in der Stage schon gewechselt und damit kommt da dann null zurück. Nimm as onAction bei dem Menu raus - das könnte es schon beheben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
L JavaFX Scene wechseln unter FX AWT, Swing, JavaFX & SWT 5
Maxim6394 JavaFX Scene Builder - Crash bei eigener Komponente AWT, Swing, JavaFX & SWT 2
N JavaFX Einfacher Taschenrechner mit Scene Builder und Java FX AWT, Swing, JavaFX & SWT 0
B Scene Builder Textfeld Begrenzen AWT, Swing, JavaFX & SWT 3
Tippster JavaFX Scene neu berechnen lassen AWT, Swing, JavaFX & SWT 5
I Scene Builder - mehrere Seiten AWT, Swing, JavaFX & SWT 6
J JavaFX Schiffe versenken mit JavaFX und Scene builder AWT, Swing, JavaFX & SWT 3
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
N setOnKeyPressed ohne Scene AWT, Swing, JavaFX & SWT 2
G JavaFX Scene ausdrucken nicht möglich, Seite leer AWT, Swing, JavaFX & SWT 5
D Verschieden Scenen ansprechen mit dem Scene Builder und JavaFX (Eclipse) AWT, Swing, JavaFX & SWT 16
W Nullpointer Exception beim übertragen von Daten von Scene zu Scene AWT, Swing, JavaFX & SWT 6
W Aufrufen einer bestimmten Scene mit if-Bedingung AWT, Swing, JavaFX & SWT 4
izoards Scene Builder vs. reality..... AWT, Swing, JavaFX & SWT 8
H JavaFX JavaFX - Scene Builder - BorderPane AWT, Swing, JavaFX & SWT 23
T Scene-Wechsel manchmal weiss AWT, Swing, JavaFX & SWT 3
temi JavaFX Mehrere Views mit Stage.setScene() oder mit Scene.setRoot()? AWT, Swing, JavaFX & SWT 7
S Kann javafx.scene.layout.VBoxBuilder nicht importieren AWT, Swing, JavaFX & SWT 3
S Scene Builder Fehlermeldung (Anfängerprobleme) AWT, Swing, JavaFX & SWT 0
S Scene Builder Fehlermeldung (Anfängerprobleme) AWT, Swing, JavaFX & SWT 8
L JavaFX AnchorPane an die Größe der Scene oder Window binden? AWT, Swing, JavaFX & SWT 3
M error: package javafx.scene.web is not visible import javafx.scene.web.*; AWT, Swing, JavaFX & SWT 16
R JavaFX Scene Builder Grundsätzliches AWT, Swing, JavaFX & SWT 6
S JavaFX Unterschiede zwischen Scene Builder 2.0 und der ausgeführten App AWT, Swing, JavaFX & SWT 17
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
S JavaFX Scene öffnet sich nicht AWT, Swing, JavaFX & SWT 3
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
D Canvas oder scene graph? AWT, Swing, JavaFX & SWT 16
FRI3ND JavaFX: Wie kann ich einer Scene Argumente übergeben? AWT, Swing, JavaFX & SWT 14
R Größe von Scene und stage an grid anpassen AWT, Swing, JavaFX & SWT 4
I Zweite Scene aufrufen AWT, Swing, JavaFX & SWT 4
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
B JavaFX Grundlegende Verständnisfrage JavaFX<->Scene Builder AWT, Swing, JavaFX & SWT 12
D Gluon Scene Builder Custom AWT, Swing, JavaFX & SWT 0
R Scene speichern AWT, Swing, JavaFX & SWT 7
I JavaFX-Scene-Überlagerung/Wechsel mit pausieren der anderen Scene AWT, Swing, JavaFX & SWT 0
L JavaFX leeres weißes Image - javafx.scene.image.Image AWT, Swing, JavaFX & SWT 2
L JavaFX GUI mit JavaFX. Scene Builder source code? AWT, Swing, JavaFX & SWT 6
O JavaFX Aktualisierung der Scene AWT, Swing, JavaFX & SWT 1
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
J JavaFX Scene - Buttonklick abwarten AWT, Swing, JavaFX & SWT 4
D javafx.scene.control.TreeView als dropdown Menü AWT, Swing, JavaFX & SWT 6
M JavaFX Scene wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
n00b4u JavaFX Scene-Builder Ressourcengrab? AWT, Swing, JavaFX & SWT 0
I Scene Builder kann .fxml nicht mehr laden AWT, Swing, JavaFX & SWT 3
javampir Java FX Scene Management AWT, Swing, JavaFX & SWT 1
boscho87 JavaFX Variabeln an neue Scene übergeben AWT, Swing, JavaFX & SWT 0
A Mit dem Scene Builder eine Collage erstellen (Bilder beziehen aus Flickr) AWT, Swing, JavaFX & SWT 1
L JavaFX Horizontale Linie zur Scene binding AWT, Swing, JavaFX & SWT 3
B JavaFX Scene Builder: resize funktioniert (meist) nicht AWT, Swing, JavaFX & SWT 6
M JavaFX Wo finde ich den Scene Builder? AWT, Swing, JavaFX & SWT 3
A JavaFX Scene Builder eigene Klasse hinzufügen AWT, Swing, JavaFX & SWT 2
F JavaFX Scene Builder AWT, Swing, JavaFX & SWT 2
F JavaFX Scene Builder AWT, Swing, JavaFX & SWT 3
K JavaFX Focus Listener für gesamte Scene AWT, Swing, JavaFX & SWT 1
D JavaFX Scene Builder 2.0 einfügen einer CheckBoxListCell AWT, Swing, JavaFX & SWT 0
M JavaFX Fenstersteuerung in scene builder AWT, Swing, JavaFX & SWT 2
B JavaFX Problem bei Kamera / Group, gesamte Scene bewegt sich mit AWT, Swing, JavaFX & SWT 0
N JavaFX TreeTable Scene Builder AWT, Swing, JavaFX & SWT 8
V kann ich in einer Klasse stage und scene deklarieren, aber in anderen Klassen Inhalte hinzufügen ? AWT, Swing, JavaFX & SWT 5
F GUI Einstieg (Scene Builder) AWT, Swing, JavaFX & SWT 3
H JavaFx - Scene Builder 2.0 - Classpath AWT, Swing, JavaFX & SWT 2
J JavaFX Variable an neue Scene übergeben AWT, Swing, JavaFX & SWT 8
A JavaFX Eigene Komponenten im Scene Builder AWT, Swing, JavaFX & SWT 0
M JFX8 Mixed 2D and 3D, Scene Subscene incorrect drawing 3ds-file AWT, Swing, JavaFX & SWT 6
I JavaFX - Pane wechseln über 2. Controller AWT, Swing, JavaFX & SWT 5
melaniemueller Layout wechseln über RadioButtons AWT, Swing, JavaFX & SWT 4
CptK JPanels wechseln AWT, Swing, JavaFX & SWT 2
J splitpane - Wechseln auf anderen Split erkennen AWT, Swing, JavaFX & SWT 11
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
A Inhalt wechseln bei Klick auf Label AWT, Swing, JavaFX & SWT 8
J Tableview - kann man mit Enter die Zellen wechseln AWT, Swing, JavaFX & SWT 1
P Zwischen verschiedenen Panels wechseln AWT, Swing, JavaFX & SWT 3
Ksanatos Swing Bild (.jpg) einlesen und per Button wechseln AWT, Swing, JavaFX & SWT 9
M JavaFX JRXML Content wechseln AWT, Swing, JavaFX & SWT 3
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
P Swing Panels Wechseln AWT, Swing, JavaFX & SWT 9
G Menübar anklicken und Inhalt entsprechend wechseln AWT, Swing, JavaFX & SWT 4
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
D Zwischen Null-Layouts wechseln AWT, Swing, JavaFX & SWT 2
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
J Fensterinhalt bei Klick auf Menüitem wechseln AWT, Swing, JavaFX & SWT 1
T Tab per Code wechseln? AWT, Swing, JavaFX & SWT 3
A BorderLayout "Center" Inhalt wechseln AWT, Swing, JavaFX & SWT 1
V RadioButton aktivieren/deaktivieren; Zustand abfragen und wechseln AWT, Swing, JavaFX & SWT 2
E JavaFX fxml files wechseln AWT, Swing, JavaFX & SWT 4
S Swing, Button benutzen zum Hintergrund wechseln AWT, Swing, JavaFX & SWT 3
A combobox automatisch in ein textfeld wechseln AWT, Swing, JavaFX & SWT 3
bluerob JComponenten verschieben sich bei Fenster wechseln AWT, Swing, JavaFX & SWT 3
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
S Swing JTabbedPane: Nur nach ButtonClick und nicht nach Click auf Tab ins nächste Tab wechseln AWT, Swing, JavaFX & SWT 2
Jagson Swing Von JDialog zu anderem JDialog wechseln AWT, Swing, JavaFX & SWT 2
M SWT Images bei Toggle Button wechseln AWT, Swing, JavaFX & SWT 3
X zwischen 2 JPanels "elegant" wechseln AWT, Swing, JavaFX & SWT 3
B Swing Locale wechseln, nachdem UIManager schon initialisiert ist AWT, Swing, JavaFX & SWT 5
B Panels wechseln auf Knopfdruck AWT, Swing, JavaFX & SWT 17

Ähnliche Java Themen

Neue Themen


Oben