JavaFX Grundlegende Verständnisfrage JavaFX<->Scene Builder

Bernte

Mitglied
Hallo, ich bin neu hier im Forum. Nachdem ich jetzt jede Menge verschiedene Beiträge in einigen Foren durchforstet habe und noch nicht so wirklich schlauer bin, werde ich hier nun auch mal einen Thread erstellen. :)

Ich bin noch relativ neu im Bereich JavaFX und allem was dazu gehört. Ich versuche mir anhand von selbst gewählten Beispielen die Basics bei zubringen.
Bei folgender Sache hänge ich momentan: Ich habe ein kleines Programm. In diesem Programm gibt es oben eine Menüleiste und einen Button in der Mitte. Der Button soll zum Beenden des Programms dienen. Wenn ich da drauf klicke soll das Programm aber nicht einfach beenden, sondern ganz typisch erstmal ein weiteres kleines Fenster aufgehen und nochmal Nachfragen ob wirklich beendet werden soll. Soweit so gut.
Ich habe mir in Scenebuilder die entsprechende Szene aufgebaut, und in Eclipse die .fxml Datei eingebunden und mit meiner entsprechenden main-Klasse "verknüpft". Wenn ich das quasi starte, sehe ich mein Fenster mit der Menüleiste und dem Button. Nun beginnt mein vermutlich grundlegendes Verständnisproblem: Es soll ja nun quasi die Absicherung zum Beenden des Programms integriert werden. Mein erster Gedanke war, das ich in SceneBuilder für diesen Zweck eine neue .fxml Datei erstelle, die das kleinere Fenster mit der Rückfrage und entsprechend 2 Buttons enthält. Ich bekomme es aber irgendwie nicht hin, das beim Klicken auf den Button im Programmfenster diese 2. .fxml Datei aufgerufen wird und so zusagen dieses Abfragefenster über dem Programmfenster erscheint. Daher vermute ich mal, mein Ansatz diesbezüglich ist völlig falsch... Versteht ihr was ich meine? Brauche ich überhaupt eine 2. .fxml Datei oder wird das irgendwie in die 1. integriert und z.B. erst sichtbar gemacht beim anklicken des Buttons?

Über entsprechende Tipps oder Rückführung auf den richtigen Weg würde ich mich freuen. :)
 

Javinner

Top Contributor
Ob es richtig oder falsch ist, da kann ich dir auch keine genaue Antwort geben. Einerseits las ich, dass Swing als Nachfolger von AWT auch mittlerweile als Veraltet angesehen werden kann und die Zukunft JavaFX ist, anderer Seits ist Swing nach wie vor dabei. Ob es ähnliches für JavaFX wie JOptionPaneFX gibt, das weiß jedoch nicht.
 

Bernte

Mitglied
Hmm, da zögern wir quasi beide an der gleichen Stelle. :) Eben weil ich auch ständig überall lese, AWT und Swing sind von "gestern", JavaFX ist der aktuelle Weg, versuche ich alles mit JavaFX zu machen. Aber alles was ich an Erläuterungen, Tutorials, etc. finde ist immer mit AWT und/oder Swing gemacht...
 

looparda

Top Contributor
Du kannst wie gesagt Dialogs benutzen, die sich für diesen Zweck perfekt anbieten. Falls es dir als Übung um's Selbermachen geht, kannst du dein eigenes Dialogfenster bauen. Du hast leider nicht beschrieben, wie du versucht hast das zweite FXML zu laden. Grundsätzlich musst du dafür den FXMLLoader nutzen.
Über die Modalität und den Owner kannst du das Verhalten der Stage anpassen, sodass das Fenster nicht ignoriert werden kann oder hinter dem Fenster deiner Applikation verschwindet. Die Methode showAndWait blockiert deine Applikation und erzwingt somit eine Auswahl im Fenster.
 

karlmasutra

Mitglied
@Bernte du benötigst für einen zweiten Dialog eine zweite .fxml und eine zweite Controller-Klasse. Wenn du die zwei Stages in deiner Main aufgebaut hast musst du diese noch verbinden. Und du brauchst noch Methoden in der ersten Controller-Klasse und auch in der neuen.

Hier vllt ein Ansatz der dir hilft:

Java:
//Dialog Person

Stage dialogStagePerson = new Stage(StageStyle.UTILITY);

dialogStagePerson.initOwner(primaryStage);      

dialogStagePerson.initModality(Modality.WINDOW_MODAL);

dialogStagePerson.setTitle("Bearbeite Adresse");      

FXMLLoader dialogLoaderPerson = new FXMLLoader(MainGUI.class.getResource("AddressDialog.fxml"));      

GridPane dialogPerson = (GridPane) dialogLoaderPerson.load();

Scene dialogScenePerson = new Scene(dialogPerson);

dialogStagePerson.setScene(dialogScenePerson);



//Verbindung herstellen zw. PrimaryStage und PersonDialog

PersonDialogController dialogControllerPerson = (PersonDialogController) dialogLoaderPerson.getController();

mainController.setDialogStagePerson(dialogStagePerson);

mainController.setDialogControllerPerson(dialogControllerPerson);

dialogControllerPerson.setStage(dialogStagePerson);

Das musst du meines Wissen immer machen, wenn du ein neues Fenster haben willst.

Grüße
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M JTable Grundlegende Fragen AWT, Swing, JavaFX & SWT 4
Q Swing Zeichenprogramm, grundlegende Fragen AWT, Swing, JavaFX & SWT 8
G JavaFX Verständnisfrage mit parametrisierten Methoden und FXML AWT, Swing, JavaFX & SWT 21
B JavaFX Verständnisfrage EventHandler<ActionEvent> Implementierung in meiner Klasse AWT, Swing, JavaFX & SWT 2
L JavaFX Verständnisfrage zu JavaFX FXML und Controller-Klasse AWT, Swing, JavaFX & SWT 1
M Swing JButton-Konstruktor Icon-Parameter (Verständnisfrage) AWT, Swing, JavaFX & SWT 7
S Verständnisfrage EventListener AWT, Swing, JavaFX & SWT 6
S Verständnisfrage anonye Klasse ActionListener AWT, Swing, JavaFX & SWT 4
E EINFACHE Verständnisfrage zu repaint(), paintComponent(), usw. AWT, Swing, JavaFX & SWT 16
hdi Swing Erstmaliges setVisible - Verständnisfrage AWT, Swing, JavaFX & SWT 5
hdi Verständnisfrage: Container vs. Component AWT, Swing, JavaFX & SWT 3
V Verständnisfrage: Welche Positionierungskonstanten? AWT, Swing, JavaFX & SWT 4
V Verständnisfrage Text und anschließende Bildausgabe? AWT, Swing, JavaFX & SWT 6
R Verständnisfrage BufferStrategy: g.dispose() AWT, Swing, JavaFX & SWT 3
K Verständnisfrage zum CellRenderer AWT, Swing, JavaFX & SWT 4
A Verständnisfrage zur Ereignisbehandlung AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben