• Wir präsentieren Dir heute ein Stellenangebot für einen Frontend-Entwickler Angular / Java in Braunschweig. Hier geht es zur Jobanzeige

JavaFX Fenster in JavaFX öffnen Schliessen (Initialisierung)

M

MiMa

Top Contributor
Hi,
weiter geht es mit JavaFX Programmierung.
In meiner Anwendung wird ein Startfenster (FXML) angezeigt in der 4 Werte in einem Label gepackt wurden und 4 Schaltflächen in dem ein ImageView enthalten sind.
in der Methode "initialize()" habe ich die Labels jeweils an Properties gebunden.
Eine Weitere Schaltfläche ruft ein weiteres FXML Fenster auf welches Modal zusätzlich geöffnet wird.
In diesem Kann ich Werte verändern, speichern und das Fenster wieder schließen.

Nachdem das Fenster zum Einstellen geschlossen wurde wird das Startfenster wieder freigegeben und kann keine Änderung der Bindungen feststellen?
Ich habe mal die eine Schaltfläche im Startfenster implementiert um im LOG die geänderten Werte aus zu geben.
Diese sind im Startfenster verfügbar, werden aber nicht in den Labels aktualisiert.
Ich habe das Gefühl, dass das Startfenster nach dem Schließen des Fensters zum Einstellen das Startfenster nicht mehr initialisiert wird??
Liege ich da richtig?
Aktuell habe ich das wie folgt gelöst
Java:
@Override
    public void initialize(URL url, ResourceBundle rb) {
        LOG.info("Initialisierung des Startfenster");
        bindungen();
    }
Mit einer Methode der Bindungen
Java:
private void bindungen(){
        // Binden der Werte an das Startfenster
        this.einstellungenModell.setBenutzer1Name(this.einstellungen.getBenutzer1Name());
        this.einstellungenModell.setBenutzer2Name(this.einstellungen.getBenutzer2Name());
        this.einstellungenModell.setBenutzer3Name(this.einstellungen.getBenutzer3Name());
        this.einstellungenModell.setBenutzer4Name(this.einstellungen.getBenutzer4Name());
       
        benutzerName1LBL.textProperty().bind(this.einstellungenModell.benutzer1NameProperty());
        benutzerName2LBL.textProperty().bind(this.einstellungenModell.benutzer2NameProperty());
        benutzerName3LBL.textProperty().bind(this.einstellungenModell.benutzer3NameProperty());
        benutzerName4LBL.textProperty().bind(this.einstellungenModell.benutzer4NameProperty());
    } // bindungen
Allerdings habe ich im Startfenster eine Schaltfläche Aktualisieren der die Methode "bindungen()"
aufruft und das Problem löst.
Mir wäre eine Lösung ohne Aktualisieren Schaltfläche lieber.

Was da jemand etwas?

Danke
Mi
 
Zuletzt bearbeitet:
M

MiMa

Top Contributor
Ich habe da ein Video gefunden was dem nahe kommt.
YoutubeVideo - Philip Johnson
Ich habe eine Startklasse (Programmstart)
Der Einfachheit einen Kontroller für beide FXML Fenster
Eine Methode "anmelden" wechseln zum Hauptfenster
Eine Methode "abmelden" wechseln zum Loginfenster

Java:
public class Programmstart extends Application {

Klasse Programmstart
    @Override
    public void start(Stage primaryStage) throws IOException {
        FXMLLoader loader = new FXMLLoader(Programmstart.class.getResource("/Fenster/Login.fxml"));
        AnchorPane root = loader.load();
        Scene scene = new Scene(root);
      
        primaryStage.setTitle("Login Fenster");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
}

FensterController
Java:
public class FensterController implements Initializable {

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }

    @FXML
    void anmeldenBTN(ActionEvent event) throws IOException {
        System.out.println("Anmelden wurde betätigt");
        Parent hauptfenster_parent = FXMLLoader.load(getClass().getResource("/Fenster/Hauptfenster.fxml"));
        Scene hauptfenster_scene = new Scene(hauptfenster_parent);
        Stage hauptfenster_fenster = (Stage) ((Node) event.getSource()).getScene().getWindow();
        hauptfenster_fenster.hide();
        hauptfenster_fenster.setScene(hauptfenster_scene);
        hauptfenster_fenster.show();
    }
  
    @FXML
    void abmeldenBTN(ActionEvent event) throws IOException{
        System.out.println("Abmelden wurde betätigt");
        Parent loginfenster_parent = FXMLLoader.load(getClass().getResource("Fenster/Login.fxml"));
        Scene loginfenster_scene = new Scene(loginfenster_parent);
        Stage loginfenster_fenster = (Stage) ((Node) event.getSource()).getScene().getWindow();
        loginfenster_fenster.hide();
        loginfenster_fenster.setScene(loginfenster_scene);
        loginfenster_fenster.show();
    }
}

Das wechseln vom Login zum Hauptfenster klappt.
Nun habe ich mir gedacht um zum Hauptfenster wieder zurück zu gelangen mach ich das gleiche nochmal für das Loginfenster?!?

Da ich aber einen Fehler erhalte der auf das Laden der FXML Datei des Loginfenster erhalte und mir die Zeile ansehe indem das Fenster ausgeschaltet wird ist hide also verbergen.

Bedeutet das, dass das Loginfenster noch existiert?
Wie bekomme ich es dann wieder zum vorschein?

Danke
Mi
 
kneitzel

kneitzel

Top Contributor
Da ich aber einen Fehler erhalte der auf das Laden der FXML Datei des Loginfenster erhalte
Wie wäre es, wenn Du uns diesen Fehler einmal zeigst? Dann kann man evtl. mehr sagen. Aber es fehlen einfach zu viele Informationen um da wirklich etwas konkretes zu sagen.

Bedeutet das, dass das Loginfenster noch existiert?
Du schließt doch gar kein Fenster. Du suchst Dir dir Referenz zum Fenster (Stage) heraus, versteckst es, setzt eine neue Scene und machst es dann wieder sichtbar.

Du tauschst also nur den Inhalt des Fensters aus.
 
M

MiMa

Top Contributor
Ja, das habe ich auch mittlerweile Festgestellt, da sich der Titel im Fenster nicht verändert.
Dann leuchtet mir auch ein das es einen Fehler gibt wenn es noch existiert.

Hier die Fehlermeldung
Code:
Feb. 09, 2021 3:24:54 PM javafx.fxml.FXMLLoader$ValueElement processValue
WARNING: Loading FXML document with JavaFX API of version 15.0.1 by JavaFX runtime of version 13.0.2
Anmelden wurde betätigt
Feb. 09, 2021 3:24:56 PM javafx.fxml.FXMLLoader$ValueElement processValue
WARNING: Loading FXML document with JavaFX API of version 15.0.1 by JavaFX runtime of version 13.0.2
Abmelden wurde betätigt
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1787)
    at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1670)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    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.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    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:8890)
    at javafx.controls/javafx.scene.control.Button.fire(Button.java:203)
    at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206)
    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:218)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    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.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    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:3862)
    at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1849)
    at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2590)
    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.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
    at java.base/java.lang.Thread.run(Thread.java:830)
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:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    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:567)
    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:1782)
    ... 50 more
Caused by: java.lang.NullPointerException: Location is required.
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3230)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3194)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3163)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3136)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3113)
    at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3106)
    at Fenster.FensterController.abmeldenBTN(FensterController.java:49)
    ... 61 more
 
kneitzel

kneitzel

Top Contributor
Da findet er wohl die fxml Ressource nicht. Wenn die beiden Dateien am gleichen Ort liegen, dann liegt es am fehlenden /.

So sucht er vom Verzeichnis des Namespaces aus nach dem Ordner Fenster und da drin dann die fxml Datei.
 
M

MiMa

Top Contributor
Super, vielen Dank.
Das hatte ich überhaupt nicht gesehen das dort der / fehlt o_O
Jetzt funktioniert es.
Ist es dann die richtige Vorgehensweise das so zu machen?

Es wird ja eine neue Scene erstellt, die wäre dann zweimal im Speicher?!?
 
kneitzel

kneitzel

Top Contributor
Die alte Scene wird aber doch nicht mehr referenziert und wird daher ein Fall für den GC. Da wäre ich daher erst einmal zuversichtlich, dass es funktionieren sollte.

Ob man da nun die primaryStage immer weiter verwendet oder neue Fenster öffnet.... Ob man ein oder mehrere Controller haben möchte ... Das ist alles Ansichtssache.

Die Verwendung einer primaryStage vereinfacht meiner Meinung nach ein paar Dinge. Das ist daher keine schlechte Idee. Wobei ich eher dazu neige, das ähnlich zu machen, wie man es meist gewohnt ist: Man hat ein Hauptfenster. So lange man nicht angemeldet ist, ist es mehr oder weniger leer. Und dann öffnet sich ein zweites Fenster zum Anmelden oder die Anmeldemaske ist innerhalb des Fensters / der Scene (Hängt vom Inhalt ab, was da so möglich ist...)

Ein Controller für zwei Scenes: Das würde ich so nicht machen. Bei mir gibt es da in der Regel mehrere Controller. Aber das ist auch kein Fehler.
 
M

MiMa

Top Contributor
In meiner aktuellen Applikation mache ich auch für jedes Fenster einen eigenen Kontroller, nur hier im Beispiel habe ich nur einen verwendet.
 
M

MiMa

Top Contributor
Das mit dem Fenster tauschen ist gut zu wissen wie es geht, denn ich benötige diese Vorgehensweise wenn ich vom Startfenster in das Hauptfenster wechseln möchte.
Allerdings möchte das Startfenster zum Fenster Programmeinstellungen geöffnet halten und öffne es Modal, so dass das Startfenster keine Reaktionen zulässt bis die Programmeinstellungen wieder geschlossen sind.

Um das Fenster der Programmeinstellungen zu schließen und zum Startbildschirm zurück zu kehren und zu fokussieren habe ich folgenden Code in den Programmstart eingebunden.

Programmstart
Java:
public class Programmstart extends Application {

    // Erstellt ein LoggerObjekt und holt dessen Instanz
    private static final Logger LOG = LogManager.getLogger(Programmstart.class);

    // Datenmodelle
    private Einstellungen einstellungen;
    private static Stage startFenster;
    ...
    ...
    public static Stage holeFensterStart() {
           LOG.info("Startfenster wird abgerufen");
           return startFenster;
    }
    ...
    ...

EinstellungenController
Java:
@FXML
    void speichernBTN(ActionEvent event) {
        LOG.info("Die Schaltfläche Speichern und schließen wurde betätigt");
        ...
        ...
        ...
        // aktuelles Fenster schließen
        final Node source = (Node) event.getSource();
        final Stage aktuellesFenster = (Stage) source.getScene().getWindow();
        aktuellesFenster.close();
    
        // Startfenster öffnen
        Stage startFenster = new Stage();
        startFenster = Programm.Programmstart.holeFensterStart();
        startFenster.show();
    } // speichernBTN

Ich erhalte eine Null-Pointer Exception wenn "startFenster.show" aufgerufen wird.

Fehlermeldung
Java:
WARNING: Loading FXML document with JavaFX API of version 15.0.1 by JavaFX runtime of version 13.0.2
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1787)
    at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1670)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    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.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:8890)
    at javafx.controls/javafx.scene.control.Button.fire(Button.java:203)
    at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206)
    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:218)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    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.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:3862)
    at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1849)
    at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2590)
    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.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
    at java.base/java.lang.Thread.run(Thread.java:830)
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:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    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:567)
    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:1782)
    ... 46 more
Caused by: java.lang.NullPointerException
    at Fenster.EinstellungenController.speichernBTN(EinstellungenController.java:220)
    ... 57 more

Vielleicht muss ich das abfragen des Startfenster im StartfensterController definieren und das aktuelle Fenster
referenzieren?

Oder, was mir gerade einfällt ist die Methode "bindungen()" im StartfensterController nach dem Schliessen des
Programmeinstellungen Fenster auf zu rufen welches dann das Fenster aktualisiert?!?!

Demnach werden dann die non-static Variablen meckern und ich weiss nicht, ob das ein guter Weg ist?

Danke
Mi
 
Zuletzt bearbeitet:
kneitzel

kneitzel

Top Contributor
Also erst einmal zeigst Du keinen Code, dass du startFenster in Deiner Klasse Programmstart irgendwo setzt. Das könnte die NPE erklären.

Und das new Stage() kann natürlich auch weg, denn die Variable wird ja direkt überschrieben durch den folgenden Aufruf.

Und im Augenblick finde ich es auch noch nicht wirklich intuitiv vom Ablauf her. Du zwingst da deiner Klasse Programmstart irgendwas auf, das nicht wirklich schlüssig scheint.

Das Einstellungsfenster wird ja irgendwo geöffnet. Das wird doch vom Controller ausgehen. Die Funktionalität könnte z.B. Showable sein mit show() Methoden. Der Controller vom Hauptfenster implementiert dies. Der Settings Controller hat dann eine Möglichkeit, ein Showable zu bekommen. Dann würde er einfach ein mainController.show() aufrufen. (mainController wäre dann ein Showable).

Dann hättest Du das alles schön separiert und Abhängigkeiten wären schön immer da, wo diese hin gehören.

Die Idee kann man natürlich noch weiter treiben, denn der EinstellungsController hat ja dann die Möglichkeit, ein ShowAble entgegen zu nehmen ...

Das ist aber einfach mal ohne viel Nachzudenken etwas herum gesponnen... Mag besser gehen, aber etwas in der Art finde ich einleuchtender.
 
M

MiMa

Top Contributor
In der Methode "ladeFensterStart" hatte vor dem lesen deines Posts noch "this.startFenster = startFenster" hinzugefügt und dadurch konnte wie du schon angemerkt hast, das NPE behoben werden.
Allerdings hat es nicht den Effekt gebracht den ich mir erhofft hatte.
Ich wollte das nach dem Schließen des Programmeinstellungsfenster die geänderten Inhalte automatisch im Startfenster aktualisiert werden.
Das mache ich aktuell mit einer Schaltfläche "Aktualisieren" welches die Methode "bindungen()" aufruft und damit die Inhalte aktualisiert.

Auch wenn es vielleicht noch nicht Intuitiv ist, bin ich gerne Lernfähig.
Es ist meiner erste richtige GUI die ich Programmiere und dann noch in JavaFX mit FXML und MVC das hat mir schon eine Knoten im Kopf gemacht, denn anfangs hatte ich das MVC zwar theoretisch begriffen aber nicht wirklich richtig umsetzten konnte.

Mir ist gerade der Gedanke gekommen, einen Change Listender im StartfensterController zu implementieren, damit bei Änderungen der Einstellungen diese im Fenster zu aktualisieren!
Ich weis, das es die Change Listener gibt, habe aber bisher noch keinen richtig implementiert.

Dann müsste ich auch nicht das Startfenster im EinstellungenController aufrufen?!?

Hier wird das Startfenster geladen welches in der Klasse Programmstart ist
Java:
public void ladeFensterStart(Stage startFenster) throws IOException{
        LOG.info("Startfenster wird geladen");
   
        FXMLLoader startLaden = new FXMLLoader();
        startLaden.setLocation(Programmstart.class.getResource("/Fenster/Startfenster.fxml"));
   
        // Erzeugt und Verbindet den Kontroller für das Startfenster mit Parameter "Einstellungen"
        StartfensterController startfensterController = new StartfensterController(this.einstellungen);
        // Verbinden des Kontrollers mit dem Fenster
        startLaden.setController(startfensterController);
   
        Parent startLayout = (Parent) startLaden.load();
        Scene startInhalte = new Scene(startLayout);
   
        startFenster.setTitle("Startfenster");
        startFenster.setResizable(false);
        startFenster.setScene(startInhalte);
        startFenster.show();

        // Speichern des Startfensters
        this.startFenster = startFenster;
    } // startFenster

Hier wird das Einstellungen Fenster aufgerufen das sich in StartfensterController befindet

Java:
@FXML
    void einstellungenBTN(ActionEvent event) throws IOException {
        LOG.info("Die Systemeinstellungen wurden aufgerufen");
        LOG.info("Das Fenster Einstellungen wird geladen");
        Stage einstellungenFenster = new Stage();

        FXMLLoader einstellungenLaden = new FXMLLoader();
        einstellungenLaden.setLocation(StartfensterController.class.getResource("/Fenster/Einstellungen.fxml"));

        // Erzeugt und Verbindet den Kontroller für das Einstellungenfenster mit Parameter "Einstellungen"
        EinstellungenController einstellungenController = new EinstellungenController(this.einstellungen);
        // Verbinden des Kontrollers mit dem Fenster
        einstellungenLaden.setController(einstellungenController);

        Parent einstellungenLayout = (Parent) einstellungenLaden.load();
        Scene einstellungenInhalte = new Scene(einstellungenLayout);
        einstellungenFenster.setScene(einstellungenInhalte);
        einstellungenFenster.setTitle("Programmeinstellungen");
        einstellungenFenster.setResizable(false);
        einstellungenFenster.initModality(Modality.APPLICATION_MODAL);
        einstellungenFenster.show();
    } // einstellungenBTN

Die Methode der Schaltfläche Speichern und Schließen in der Einstellungen Controller Klasse
Java:
@FXML
    void speichernBTN(ActionEvent event) {
        LOG.info("Die Schaltfläche Speichern und schließen wurde betätigt");
          ...
            ...
               ...
        // Einstellungen auf Festplatte speichern
        Einstellungen.schreibeEinstellungenHD(einstellungen);

        // aktuelles Fenster schließen
        final Node source = (Node) event.getSource();
        final Stage aktuellesFenster = (Stage) source.getScene().getWindow();
        aktuellesFenster.close();
        LOG.info("Das aktuelle Einstellungen Fenster wurde geschlossen");
   
        // Startfenster wechseln
        Programm.Programmstart.holeFensterStart().show();
        LOG.info("Es wurde zum Startfenster gewechselt");
    } // speichernBTN
 
Zuletzt bearbeitet:
M

MiMa

Top Contributor
Im Grunde möchte ich vom Startfenster das Fenster Programmeinstellungen öffnen (Startfenster bleibt offen).
Dort können die Werte geändert oder ergänzt werden.
Nach dem drücken der Speichern Schaltfläche werden die Inhalte auf Festplatte gespeichert und das Fenster Programmeinstellungen wird geschlossen.
Im Startfenster sollen dann die geänderten Werte aktualisiert werden.
 
kneitzel

kneitzel

Top Contributor
Da brauchst Du dann aber doch auch kein show oder so.

Du erzeugst ja derzeit den Controller selbst:
Java:
EinstellungenController einstellungenController  = new EinstellungenController(this.einstellungen);

Also kannst Du da ein beliebigen Callback setzen. Also einfach eine Instanzvariable mit Setter. Am Anfang von mir aus vom eigentlichen Controller der Hauptfensters, so dass Du etwas hast wie:
Java:
einstellungenController.setCallback(this);

Und dann kannst Du das

Java:
        // Startfenster wechseln
        Programm.Programmstart.holeFensterStart().show();

Durch einen Aufruf ersetzen im Controller ... also sowas wie:
Java:
callback.reload();

Das Ganze sieht aber natürlich mit Lambdas / Methoden-Referenzen deutlich besser aus:

Java:
public interface Callback {
    public void call();
}

Die Instanzvariable / der Aufruf wären dann in etwa:

Java:
private Callback reloadCallback;

public void setReloadCallback(Callback callback) { this.callback = callback; }

// ...
  if (reloadCallback != null) reloadCallback.call();
// ...

Und die Nutzung wäre dann ein einfaches:
Java:
// ...
EinstellungenController einstellungenController = new EinstellungenController(this.einstellungen);
einstellungenController.setReloadCallback(this::reload);
// ...
private void reload() {
    // ....
}
// ...
 
M

MiMa

Top Contributor
klappt irgendwie nicht?
Ist heute vielleicht zu viel gewesen?
Schau morgen mal nach wie ein Callback überhaupt funktioniert!

Danke
 
M

MiMa

Top Contributor
Habe nun folgendes gemacht

Klasse EinstellungenController nach dem Konstruktor folgende Zeilen hinzugefügt
Java:
EinstellungenController einstellungenController = new EinstellungenController(this.einstellungen);
   
    public void setEinstellungenController(){
        einstellungenController.setCallback(this);
    }

Dann erhalte ich aber eine Problemmeldung die besagt, das
cannot finde Symbol
symbol: methodSetCallback(EinstellungenController)

Ich habe im Netz auch nichts wirklich verständliches über JavaFX Callback gefunden!!
Auch in den Büchern die ich habe kann ich ebenfalls nichts verständliches finden?
 
kneitzel

kneitzel

Top Contributor
Callback bezeichnet einfach dieses Pattern: Ein Element ruft einfach zurück...

Und wie immer gilt: Du musst in Deinen Klassen die Funktionalität natürlich schreiben. Also zum einen das Interface Callback habe ich ja angegeben. Desweiteren wie so ein "reloadCallback" aussehen könnte (Das ist der Bereich mit der Instanzvariablen) und dann auch, wie der Aufruf aussehen könnte um das zu setzen.
 
M

MiMa

Top Contributor
Ich habe keine Ahnung wie das ganze aussehen muss?!?
Habe auch schon im Netz nach einem Beispiel für Callback gesucht aber nicht wirklich was gefunden.

Ich weis zwar auch wie man eine Kontroller Instanz erzeugt, diese dann auch im anderen Controller verfügbar macht und wie man FXML Fenster wechselt.
Mit Listener, Callbacks oder auch mit Lambdas habe ich noch nie gearbeitet gearbeitet.
In die GUI Programmierung steige ich erst gerade ein und das was ich bereits gelernt habe versuche ich am eigenen Projekt zu festigen.

Das bedeutet, ich lerne aus Büchern und Tutorials und festige es dann im eigenen Projekt.
Dabei gehe ich auch Strukturiert vor.
1. Grundprogramm mit einem Fenster
2. Programmeinstellungen mit eigenem Fenster + Speicherung auf HD
3. Menüleiste
4. Hauptprogramm mit eigenem Fenster und Datenverarbeitung
5. ...
 
M

MiMa

Top Contributor
In den letzten Tagen habe ich mich mit dem Buch "Der Weg zum Java Profi" beschäftigt.
Besonders das Kapitel OOP nochmal durchgelesen.
Theoretisch verstehe ich das mit dem Callback aber da ich noch nie eines gemacht habe, kann ich es nicht implementieren.
Allerdings ist mir nicht klar warum ich diesen benötige?
Im Startfenster habe ich ein Datenobjekt indem alle Programmeinstellungen enthalten sind.
Mit dem öffnen des Fensters Programmeinstellungen erstelle ich einen zusätzlichen Kontroller und sende eine Referenz auf das Datenmodell mit.
Ein ViewModell bindet die Eingaben an den Einstellungenkontroller und das Programmeinstellungenfenster durch die Schaltfläche Speichern werden alle Daten auf das Datenmodell aktualisiert und zusätzlich noch auf Festplatte gespeichert.

Wenn das Programmeinstellungen Fenster geschlossen und das Startfenster wieder aktiv ist, würde einfach ein reload ausreichen um das Fenster zu aktualisieren. Das mache ich aktuell mit einer eigenen Schaltfläche.
 
kneitzel

kneitzel

Top Contributor
Das generelle Thema ist ja, dass Du Dinge trennen willst. Abhängigkeiten reduzieren.

Und nun willst Du Änderungen mitbekommen. Das ist dann das, was man als Observer bezeichnet. (Callback ist nichts anderes. Das kommt aus der Asynchronen Bearbeitung und war dann einfach umgangssprachlich ein: "Mach das mal und wenn Du fertig bist, dann gibst Du das Ergebnis an ...")

Wo Du das wie implementierst, ist vollkommen egal.
- In der UI Entwicklung sind teilweise Events bekannt wie "vor dem Schließen", "nach dem Schließen".... Man konnte sich also das Event geben lassen, dass das Fenster geschlossen wurde (Um dann hinterlegte Daten abzufragen oder so ...). Dies gibt es sogar bereits in der Stage: setOnCloseRequest
- Du kannst es auf Datenebene haben. Das setzt das ObserverPattern dort voraus. Du kannst also Daten z.B. in ObservableLists und den StringProperteis und so haben. Das sind Klassen, die im JavaFX Umfeld bereit gestellt werden und die auch das Binding erlauben. Da ein Model aber in der Regel diese Klassen aus dem JavaFX Umfeld nicht nutzt, ist dies relativ schwer. Aber ja: Das wäre auch eine valide Möglichkeit.
- Generell kannst Du neben den fertigen Implementationen das auch jederzeit selbst implementieren. https://de.wikipedia.org/wiki/Beobachter_(Entwurfsmuster) zeigt das Pattern im Detail.

Das wäre so die Einordnung im Schnelldurchlauf. Ich muss mal schauen, ob ich die Zeit finde, da mal ein Beispiel zusammen zu stellen, das die einzelnen Möglichkeiten etwas zeigt. Ich war die letzten Wochen nur etwas unter zeitlichem Druck, so dass ich zu keinerlei weiteren Dingen gekommen bin ...
 
kneitzel

kneitzel

Top Contributor
Einfach ein paar Möglichkeiten aufgeführt, die hier JavaFX direkt mitbringt:

a) Szenario; Im aktuellen Fenster wird nichts weiter gemacht, alles soll erst einmal im neuen Fenster stattfinden
In diesem Szenario ist es möglich, einfach ein showAndWait() statt dem show() aufzurufen. So würdest Du zu den Einstellungen wechseln und der Benutzer muss die Einstellungen schließen, um im alten Fenster weiter fortfahren zu können.
Nach dem showAndWait() Aufruf kommt dann also die Aktualisierung, die Du gerne haben möchtest.

b) Events, die eine Stage hat:
Hier sind drei Methoden zu nennen:
setOnHiding
setOnHidden
setOnCloseRequest
Da kann man EventHandler übergeben, die da reagieren.
setOnHiding ist, ehe das Fenster versteckt oder geschlossen wird.
setOnHidden Event wird ausgelöst, wenn das Fenster geschlossen oder versteckt ist.
setOnCloseRequest ist einfach nur ein Event, das ausgelöst wird, wenn der das Schließen beantragt wurde. Das wird nicht ausgeführt, wenn ein close() aufgerufen wird. ein close() Aufruf auf einer Stage löst nur Hiding und Hidden aus (halt vor und nach dem Schließen).

Das sind im Falle des Einstellungs-Fensters einfache Optionen, die bereits eingebaut sind.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
platofan23 JAVAFX zweites Fenster öffnen AWT, Swing, JavaFX & SWT 2
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
P JavaFX Fenster lädt nicht mehr AWT, Swing, JavaFX & SWT 4
T JavaFX ControlsFX-Notification öffnet nicht wenn kein JavaFX-Fenster offen. AWT, Swing, JavaFX & SWT 1
E JavaFX JavaFX Fenster nicht schließen AWT, Swing, JavaFX & SWT 4
G JavaFX Sub-Fenster im Vordergrund halten AWT, Swing, JavaFX & SWT 5
UnknownInnocent Fokus auf geöffnetes Zweit-Fenster setzen und Eingaben außerhalb blocken AWT, Swing, JavaFX & SWT 2
B Text mit Absatz + OK-Button, der Fenster wieder schließt AWT, Swing, JavaFX & SWT 7
N Kontextmenü (Popup-Fenster) erstellen AWT, Swing, JavaFX & SWT 3
L Hintergrundbild im Fenster darstellen AWT, Swing, JavaFX & SWT 9
P JavaFX Fenster wird nicht angezeigt (Mac) AWT, Swing, JavaFX & SWT 8
VPChief Buttons Reagieren erst wenn ich Fenster minimiere AWT, Swing, JavaFX & SWT 4
B JavaFX TextField Eingabe in neues Fenster übernehmen AWT, Swing, JavaFX & SWT 4
N Drag and Drop Fenster AWT, Swing, JavaFX & SWT 11
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
J Fenster mit Inhalten aus einem Array Füllen AWT, Swing, JavaFX & SWT 4
S Swing Fenster State Machine AWT, Swing, JavaFX & SWT 1
A Fenster genau unterhalb von JTextField anzeigen AWT, Swing, JavaFX & SWT 1
J Overlay Panel statt neues Fenster AWT, Swing, JavaFX & SWT 6
S Swing Bei start des Programmes kein Fenster zu sehen AWT, Swing, JavaFX & SWT 1
X Neues Fenster mit Button öffnen und bearbeiten AWT, Swing, JavaFX & SWT 4
M JavaFX Altes Fenster (FXML Datei) löschen AWT, Swing, JavaFX & SWT 16
I AWT Listener während man in anderem Fenster ist AWT, Swing, JavaFX & SWT 4
S JavaFX Fenster aufkommen lassen, wenn mit der Maus über bestimmten Bereich fahren AWT, Swing, JavaFX & SWT 1
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
D Swing Neues (3.) Fenster öffnen AWT, Swing, JavaFX & SWT 2
G JavaFX Fenster 1 Array übertragen zur Fenster 2 AWT, Swing, JavaFX & SWT 0
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
K Fenster welches den Sieger anzeigt AWT, Swing, JavaFX & SWT 5
O JavaFX Fenster scließen AWT, Swing, JavaFX & SWT 4
A Swing Fenster ändert Position bei Mausklick nicht AWT, Swing, JavaFX & SWT 2
S SWT neues Fenster, buttons aus alten etc... AWT, Swing, JavaFX & SWT 0
D Java FXML mehrere Fenster AWT, Swing, JavaFX & SWT 4
L Input aus Sub-Fenster Startfenster übergeben AWT, Swing, JavaFX & SWT 5
B AWT Fenster schließt nicht AWT, Swing, JavaFX & SWT 2
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
G Swing Wenn ich mein JFrame Fenster vergrößere die Inhalte anpassen AWT, Swing, JavaFX & SWT 1
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
T Fenster schließen AWT, Swing, JavaFX & SWT 4
K JavaFX ObservableList + Fenster AWT, Swing, JavaFX & SWT 6
windl Transparentes / halbtransparentes Fenster AWT, Swing, JavaFX & SWT 1
K Fenster mittig im Vollbildschirm - ok, aber ... AWT, Swing, JavaFX & SWT 2
N Swing Sorry nicht mal ein Fenster öffnen... AWT, Swing, JavaFX & SWT 19
S actionlistener mit 2 fenster integrieren AWT, Swing, JavaFX & SWT 11
G Event Handling TableView daten in ein neues Fenster herauslesen? AWT, Swing, JavaFX & SWT 3
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
C Durch klicken von Button neues Fenster oeffnen AWT, Swing, JavaFX & SWT 18
D JavaFX (WebStart) Graues Fenster beim Start AWT, Swing, JavaFX & SWT 4
J Button vergrößert sich bei Fenster resize AWT, Swing, JavaFX & SWT 22
L Zweites Fenster mit Thread AWT, Swing, JavaFX & SWT 0
Paul15 Zwei Fenster AWT, Swing, JavaFX & SWT 23
T LayoutManager Methode, um Bildschirm(fenster) für Aktualisierungen zu blockieren bzw. freizugeben gesucht AWT, Swing, JavaFX & SWT 2
C AWT Problem mit Protokol Fenster AWT, Swing, JavaFX & SWT 0
L Daten in neuem Fenster AWT, Swing, JavaFX & SWT 2
D Mit Klick auf Button ein neues Fenster erzeugen AWT, Swing, JavaFX & SWT 11
I JTable: Doppelklick auf Table soll neues Fenster öffnen und Daten aus JTable anzeigen AWT, Swing, JavaFX & SWT 4
A Swing Textübergabe innerhalb der Anwendung in unterschiedlichen Fenster AWT, Swing, JavaFX & SWT 8
wolfgang63 JavaFX Animation, Kreise im vorgegebem Takt durchs Fenster laufen lassen AWT, Swing, JavaFX & SWT 3
K Java Button öffnet neues Fenster AWT, Swing, JavaFX & SWT 5
Z Fenster leer, wenn ich ein JTextField erzeuge AWT, Swing, JavaFX & SWT 3
W Swing JScrollPane für mein Fenster AWT, Swing, JavaFX & SWT 4
X Swing 2 Fenster (1 im Vordergrund) AWT, Swing, JavaFX & SWT 6
X Swing Ein neues Fenster öffen aber ohne ein extra Prozess zu starten AWT, Swing, JavaFX & SWT 1
K JavaFX Fenster aufrufen über Menü AWT, Swing, JavaFX & SWT 1
thet1983 offne Fenster gemeinsam schließen AWT, Swing, JavaFX & SWT 8
H AWT Fenster- und JLabel-Größe automatisch anpassen AWT, Swing, JavaFX & SWT 2
Z JSlider im Modalen-Fenster AWT, Swing, JavaFX & SWT 0
Tort-E JavaFX Fenster nachladen AWT, Swing, JavaFX & SWT 1
V Fenster in einem Fenster anordnen AWT, Swing, JavaFX & SWT 7
I Zwei Fenster nebeneinander anzeigen AWT, Swing, JavaFX & SWT 2
U Fenster beim Vergörßern immer quadratsich AWT, Swing, JavaFX & SWT 7
Q Swing Fenster updaten - Hinzugefügte Komponenten darstellen AWT, Swing, JavaFX & SWT 3
E Alles in einem Fenster AWT, Swing, JavaFX & SWT 5
A Fenster erstellen AWT, Swing, JavaFX & SWT 2
I Swing Beim Fenster das kleine Symbol(ICS) ändern AWT, Swing, JavaFX & SWT 3
K JavaFX Vorschau Bereich/Fenster einer bestehenden Group AWT, Swing, JavaFX & SWT 3
G Scrollbar für das Fenster einfügen AWT, Swing, JavaFX & SWT 3
X Fenster von außen ansprechen AWT, Swing, JavaFX & SWT 7
brunothg Swing JTable -> AUTO_RESIZE_OFF aber das Fenster ausfüllen AWT, Swing, JavaFX & SWT 0
G jLabel aus anderem Fenster ändern AWT, Swing, JavaFX & SWT 7
G JavaFX Neues Fenster erstellen AWT, Swing, JavaFX & SWT 3
A SWT Fenster bei MouseOver vergrößern AWT, Swing, JavaFX & SWT 5
C Umrechner im/mit Fenster AWT, Swing, JavaFX & SWT 3
F JavaFX KeyListener zum Fenster öffnen/schließen AWT, Swing, JavaFX & SWT 9
S Fenster maximieren AWT, Swing, JavaFX & SWT 7
A Swing Focus der Radio Buttons + text bleibt gleich und gleichzeitige ausgabe zweier Objekte in 1. Fenster AWT, Swing, JavaFX & SWT 3
B Komponenten in Fenster verdrängen sich untereinander AWT, Swing, JavaFX & SWT 6
W Windows Fenster in einem Programm AWT, Swing, JavaFX & SWT 2
M Swing Einzelne Fenster schließen AWT, Swing, JavaFX & SWT 2
M Mehrere Fenster innerhalb einer Application AWT, Swing, JavaFX & SWT 3
D Letzter Button füllt immer ganzes Fenster AWT, Swing, JavaFX & SWT 5
F Swing Auf Knopfdruck ein Fenster schliessen AWT, Swing, JavaFX & SWT 12
SexyPenny90 Mehrere Fenster AWT, Swing, JavaFX & SWT 2
D 2 GUI-Fenster. 2.Fenster wird nicht aufgebaut, wenn erstes beschäftigt ist. AWT, Swing, JavaFX & SWT 4
M Handling 1 Fenster mehrere Panels AWT, Swing, JavaFX & SWT 2
M Swing ButtonListener Fenster schließen AWT, Swing, JavaFX & SWT 15
F Fenster wird nicht angezeigt!? AWT, Swing, JavaFX & SWT 3
M Von einem Fenster zum anderen AWT, Swing, JavaFX & SWT 12

Ähnliche Java Themen

Anzeige

Neue Themen


Oben