Confirmation Dialog erstellen

melaniemueller

Aktives Mitglied
Ich stehe bei einer vermeintlich simplen Aufgabe total auf dem Schlauch und bräuchte ein wenig Starthilfe von euch 😅 🤔

Hier einmal die Aufgabenstellung:

Erstellen Sie einen universellen Dialog für JavaFX, in dem der Anwender eine beliebige Frage mit Ja oder Nein beantworten kann. Leiten Sie dazu eine eigene Klasse von der Klasse Alert ab. Die Texte im Dialog sollen über Argumente festgelegt werden.

Stellen Sie sicher, dass Sie die Antwort des Anwenders in Ihrem Code auswerten können. Der Dialog muss also einen Rückgabewert zur Verfügung stellen. Wie Sie dabei vorgehen, ist Ihnen freigestellt.

Ob Sie für die Lösung den neuen Dialog in den Editor aus diesem Studienheft einbauen oder eine eigene Anwendung erstellen, die nur den Dialog anzeigt und die Rückgabe auswertet, ist Ihnen freigestellt.

Einige Hinweise zur Lösung:

Einen Standarddialog für eine Bestätigung erhalten Sie mit dem Typ AlertType.CONFIRMATION.

Den Text in der Titelleiste des Dialogs können Sie über die Methode setTitle() festlegen.

Die Schaltflächen im Dialog können Sie über den Konstruktor festlegen. Dazu übergeben Sie Argumente vom Typ ButtonType. Der Wert ButtonType.YES steht zum Beispiel für eine Schaltfläche mit dem Text „Ja“ und der Wert ButtonType.NO für eine Schaltfläche mit dem Text „Nein“.

Die angeklickte Schaltfläche erhalten Sie über die Methode getResult(). Sie liefert einen Wert vom Typ ButtonType zurück.


Nun ging ich eigentlich davon aus, ich würde das direkt hinbekommen, aber das mit der eigenen Klasse und von Alert ableiten und was dabei raus kommt verwirrt mich dann doch. Ich habe nun eine Klasse erstellt. Diese leite ich wie gewünscht von Alert ab, dann bringt er mir 2 Möglichkeiten für den Konstruktor. Ich wähle den mit 3 Argumenten, da es ja heißt die Inhalte sollen über Argumente erfolgen. Nun weiß ich aber nicht wirklich weiter. Ohne diese Posten hätte ich den Dialog einfach so erstellt:
Java:
 Alert meinDialog = new Alert(AlertType.CONFIRMATION, "Hier würde eine Frage stehen", ButtonType.YES, ButtonType.NO);

Aktuell steht noch nichts dort außer:

Java:
package de.fernschulen;

import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;

public class DialogKlasse extends Alert {

    public DialogKlasse(AlertType arg0, String arg1, ButtonType[] arg2) {
        super(arg0, arg1, arg2);
}

        

    }
 

mihe7

Top Contributor
Ohne diese Posten hätte ich den Dialog einfach so erstellt:
Java:
Alert meinDialog = new Alert(AlertType.CONFIRMATION, "Hier würde eine Frage stehen", ButtonType.YES, ButtonType.NO);
Und was hindert Dich daran, im Konstruktor
Java:
super(AlertType.CONFIRMATION, "Hier würde eine Frage stehen", ButtonType.YES, ButtonType.NO);
aufzurufen?
 

melaniemueller

Aktives Mitglied
Zu meiner Schande muss ich sagen, dass ich heute endlich mal weiter gemacht habe bei dieser Aufgabe, aber einfach unfassbar frustriert bin. Das Thema JavaFX ist mir echt noch ein Dorn im Auge. Hab sogar das Studienheft nochmal durchgelesen...aber naja. Somit zeige ich euch mal mein aktuelles absolut fehlerhaftes Ergebnis und hoffe ihr habt noch weitere Anstupser für mich damit ich das ganze irgendwann mal noch fertig bekomme 😒

Also nun, ich zeig einfach mal her was da bisher steht:

Java:
package universellerDialogJavaFX;

import javafx.event.ActionEvent;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;

public class UniversellerDialog extends Alert {

    public UniversellerDialog(AlertType alertType, String DialogText, String titel, ButtonType buttonType1, ButtonType buttonType2) {
        super(alertType);
        super.setTitle(titel);
        super.setContentText(DialogText);
        super.getButtonTypes().setAll();
        super.showAndWait();
        
    }
    
    public void buttonReaktion(ActionEvent event) {
        if (super.getResult() == ButtonType.YES)
            super.setContentText("Dann hast du alles richtig gemacht - weiter so");
        else
            super.setContentText("Dann solltest du heute bewussst etwas tun, was dich glücklich macht!");
    }
    
}

Und in der Main wollte ich dann die passenden Argumente übergeben, aber beim Ausführen kommt dann nur eine große Scharr an Fehlern...
Java:
package universellerDialogJavaFX;

import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ButtonType;

public class DialogMain {

    public static void main(String[] args) {
        new UniversellerDialog(AlertType.CONFIRMATION,"Eine kurze Frage: Bist du heute glücklich?", "Wichtige Frage", ButtonType.YES, ButtonType.NO);

    }

}

Fehler:
Java:
Exception in thread "main" java.lang.ExceptionInInitializerError
    at javafx.scene.control.DialogPane.createContentLabel(DialogPane.java:167)
    at javafx.scene.control.DialogPane.<init>(DialogPane.java:218)
    at javafx.scene.control.Dialog.<init>(Dialog.java:512)
    at javafx.scene.control.Alert.<init>(Alert.java:247)
    at javafx.scene.control.Alert.<init>(Alert.java:222)
    at universellerDialogJavaFX.UniversellerDialog.<init>(UniversellerDialog.java:10)
    at universellerDialogJavaFX.DialogMain.main(DialogMain.java:9)
Caused by: java.lang.IllegalStateException: Toolkit not initialized
    at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:410)
    at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:405)
    at com.sun.javafx.application.PlatformImpl.setPlatformUserAgentStylesheet(PlatformImpl.java:695)
    at com.sun.javafx.application.PlatformImpl.setDefaultPlatformUserAgentStylesheet(PlatformImpl.java:657)
    at javafx.scene.control.Control.<clinit>(Control.java:99)
    ... 7 more


Keine Ahnung warum das so zäh läuft...ich will doch nur einen einzigen Dialog anzeigen...ich hoffe mal es ist nicht komplett falsch woran ich da den heutigen Abend bisher saß, aber wohlmöglich doch 😞
 

Jw456

Top Contributor
Also Das was du hier machst hat nicht viel mit einen javafx Projekt zu tun.
Wenn du javafx willst
erstens hast du keinen launch Aufruf in der Main und wo ist die Start Methode.
 
K

kneitzel

Gast
Das Problem ist, dass du JavaFX Elemente nur nutzen kannst, wenn das Framework (Toolkit) sozusagen gestartet ist.

Das kann man auch manuell starten - dazu kann man z.B. mal suchen, wie JavaFX Elemente in swing genutzt werden können (da wird das erst initialisiert).

Unter dem Strich läuft es vermutlich auf ein Platform.startup hinaus. Aber lies mal auf Google.
 

melaniemueller

Aktives Mitglied
Also Das was du hier machst hat nicht viel mit einen javafx Projekt zu tun.
Wenn du javafx willst
erstens hast du keinen launch Aufruf in der Main und wo ist die Start Methode.
Oky bedeutet sobald JavaFX brauch ich IMMER die Start Methode und launch Aufruf. Das hatte ich auch schon mal abgeändert und dann wieder weg. Mich verwirrt einfach die Tatsache, dass ich die ganzen Aufgaben zuvor mit Controller und FXML gearbeitet habe und dachte das gehöre eben zu JavaFX dazu und ist fester Bestandteil. Bei dieser Aufgabe zeigt es mir aber, dass man es eben nicht braucht wie eben wenn man nur einen Dialog möchte und ansonsten keinerlei Oberfläche. Daher war ich mir auch nicht sicher, was dann zwingend für JavaFX nötig ist und was nicht . Ich werd jetzt mal Start und launch ergänzen...
 

melaniemueller

Aktives Mitglied
Wie sieht denn dann die Start Methode aus? Normalerweise beschaffe ich dort ja die FXML und verbinde mit dem Controller usw. Aber eben diese Dinge habe ich nicht. Oder brauch ich die nun doch zwingend? 😖
 
K

kneitzel

Gast
Neun, die brauchst du nicht zwingend. Aber du kannst deinen Code z.B. in eine Platform.start platzieren, wenn es um JavaFX Dialoge geht.

Ab JavaFX 11 (oder so) gibt es in Plattform die startup Methode. Diese nimmt ein Runnable.

Also vermutlich kann es schon ok sein, etwas zu haben wie:
Java:
public void whatever() {
  // irgendwas, dass auch JavaFX braucht
}

  ...
  Platform startup(this::whatever());
  ...
 
K

kneitzel

Gast
Wenn du ein JavaFX Programm entwickeln willst, dann mach es nach Schema F: Von Application ableiten und launch Methode aufrufen.

Wenn es keine fx Anwendung sein soll und du dann nur mal FX Dialoge nutzen willst: siehe Antwort vor dieser...
 

melaniemueller

Aktives Mitglied
Wenn du ein JavaFX Programm entwickeln willst, dann mach es nach Schema F: Von Application ableiten und launch Methode aufrufen.

Wenn es keine fx Anwendung sein soll und du dann nur mal FX Dialoge nutzen willst: siehe Antwort vor dieser...
Ok, wenn ich dann nun dieses Grundgerüst habe:
Java:
package universellerDialogJavaFX;

import javafx.application.Application;
import javafx.stage.Stage;

public class DialogMain extends Application {
    
    
@Override
    public void start(Stage arg0) throws Exception {
        
    }
    public static void main(String[] args) {

        launch(args);
    }


}
Wo könnte ich dann meine Argumente übergeben an den Konstruktor meiner Dialog Klasse?
 
K

kneitzel

Gast
In der Regel würdest du in start die Stage füllen und sichtbar machen. Du kannst da aber prinzipiell auch alles andere machen.

Du kannst auch die main dazu nutzen, andere Dinge anzufangen. Aber dann wäre wichtig, dass UI Dinge im UI Thread erfolgen müssen => Platform.runLater
 
M

Mart

Gast
aber du willst mit deinem bestätigungs code doch in deiner app bleiben, vom confirmation dialog via args es weiter zu geben an eine neue app macht wenig sinn
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
ralfb1105 JavaFX Alert Confirmation Dialog aus einem Service Thread AWT, Swing, JavaFX & SWT 8
B Confirmation Dialog AWT, Swing, JavaFX & SWT 2
MiHimbert Rückmeldung an den aufrufenden JAVAFX-Dialog AWT, Swing, JavaFX & SWT 1
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
L Swing Files abspeichern mit Save as Dialog Fenster AWT, Swing, JavaFX & SWT 5
N JavaFX Vor beenden der Anwendung durch klicken von X Dialog zeigen AWT, Swing, JavaFX & SWT 1
C Swing Aufruf der Funktion (die ein Dialog anzeigt) über Symbol anzeigen lassen AWT, Swing, JavaFX & SWT 4
H Eigener Dialog mit Rückgabe -> Warten auf Button AWT, Swing, JavaFX & SWT 3
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
G JavaFX JavaFX-Dialog aus einer Nicht-JavaFX-Anwendung heraus AWT, Swing, JavaFX & SWT 1
C FileChooser Save-Dialog zeigt Files nicht an AWT, Swing, JavaFX & SWT 3
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
E Swing Dialog modal aufrufen AWT, Swing, JavaFX & SWT 2
T JavaFX Dialog schließt ohne dass es schließen soll AWT, Swing, JavaFX & SWT 1
RalleYTN Modaler Dialog und JTree Node mit sehr... seeeeehr vielen Elementen AWT, Swing, JavaFX & SWT 6
T JOptionPane Dialog plus Rechnung ausgeben AWT, Swing, JavaFX & SWT 1
krgewb AWT JFrame soll sich wie Dialog verhalten AWT, Swing, JavaFX & SWT 9
J JavaFX Dialog - Style AWT, Swing, JavaFX & SWT 6
D Swing Dynamisches Dialog UI AWT, Swing, JavaFX & SWT 8
H JFileChooser Dateinamen vorgeben (Save Dialog) AWT, Swing, JavaFX & SWT 9
D Neues Dialog Mittig auf dem Bildschirm AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Grafikproblem nach Aufruf von JColorChooser-Dialog AWT, Swing, JavaFX & SWT 6
M Java FX Innerhalb einem FXML-Dialog weiteren FXML-Dialog einblenden AWT, Swing, JavaFX & SWT 3
T SWT SWTBot Test: Dialog soll sich öffnen,wenn button gedrückt AWT, Swing, JavaFX & SWT 3
G Datei öffnen Dialog modifizieren AWT, Swing, JavaFX & SWT 13
W SWT Dialog richtig schließen? AWT, Swing, JavaFX & SWT 0
M Benutzer-Dialog ohne System.in/out AWT, Swing, JavaFX & SWT 2
P JOptionPane input und show Message Dialog AWT, Swing, JavaFX & SWT 5
F Dialog mit Titel, Text und Ok Button AWT, Swing, JavaFX & SWT 2
TheWhiteShadow SWT Dialog Titel setzen AWT, Swing, JavaFX & SWT 6
VfL_Freak Darstellungsproblem mit Dialog AWT, Swing, JavaFX & SWT 8
P Swing Dialog zeigt keinen Inhalt in Verbindung mit JFrame AWT, Swing, JavaFX & SWT 18
G Nebenläufiger Prozess mit Dialog AWT, Swing, JavaFX & SWT 2
C Swing Fortschrittsanzeige im Dialog ohne Fortschrittsbalken und Abbruchoption AWT, Swing, JavaFX & SWT 7
M Swing Elemente im Dialog neu "laden". AWT, Swing, JavaFX & SWT 6
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
R DnD in modalem Dialog AWT, Swing, JavaFX & SWT 4
I Dialog zum Speichern? AWT, Swing, JavaFX & SWT 16
M Dialog soll etwas an "Oberklasse" übergeben AWT, Swing, JavaFX & SWT 3
qwerqer Swing JDialog Darstellungsprobleme - Dialog lässt sich nicht schließen AWT, Swing, JavaFX & SWT 3
M Datei Speichern unter Dialog - SWT AWT, Swing, JavaFX & SWT 3
hdi Swing Bzgl JFrame & modaler Dialog AWT, Swing, JavaFX & SWT 6
N Modaler Dialog wird nicht angezeigt AWT, Swing, JavaFX & SWT 8
J SWT Dialog in Dialog automatisch öffnen AWT, Swing, JavaFX & SWT 19
H Confirm Dialog erweitern AWT, Swing, JavaFX & SWT 5
K Modaler Dialog aber trotzdem Aktualisierung des MainFrames AWT, Swing, JavaFX & SWT 6
B Gestaltung eines Optionen-Dialog AWT, Swing, JavaFX & SWT 16
P Swing Option zeitbeschränkt in modalem Dialog anbieten AWT, Swing, JavaFX & SWT 2
X Einem JFrame einen Dialog als Parent setzen. Möglich? AWT, Swing, JavaFX & SWT 4
L AWT Window, Dialog und verschiedene Betriebssysteme AWT, Swing, JavaFX & SWT 2
T SWT Window Builder Pro File Dialog anzeigen AWT, Swing, JavaFX & SWT 10
A Swing Delay (1-4 Sek.) bei JTable und Dialog beim ersten Ausführen AWT, Swing, JavaFX & SWT 3
P Swing modaler dialog AWT, Swing, JavaFX & SWT 3
P SWT Dialog AWT, Swing, JavaFX & SWT 3
O Login Dialog zweimal öffnen AWT, Swing, JavaFX & SWT 2
B Datei öffnen Dialog AWT, Swing, JavaFX & SWT 9
N Swing eigenen Dialog erstellen AWT, Swing, JavaFX & SWT 8
C Swing Fehlermeldung in einem Dialog anzeigen AWT, Swing, JavaFX & SWT 2
L Dialog mit Dauerschleifen AWT, Swing, JavaFX & SWT 4
K SWT TableViewer refresh() im Dialog AWT, Swing, JavaFX & SWT 2
Semox Swing FileSaveAs Dialog Problem AWT, Swing, JavaFX & SWT 14
H Sub-Dialog von modalem JDialog aus aufrufen - geht das? AWT, Swing, JavaFX & SWT 6
B Dialog aus DB Struktur erstellen AWT, Swing, JavaFX & SWT 4
D URL Dialog AWT, Swing, JavaFX & SWT 2
B Swing Keylistener fuer Dialog-Buttons AWT, Swing, JavaFX & SWT 2
J nicht weckklickbarer dialog AWT, Swing, JavaFX & SWT 15
S Frame - Panel - Dialog rückgabe wert AWT, Swing, JavaFX & SWT 5
D Swing Dialog schließen verhindern bei Fehleingabe AWT, Swing, JavaFX & SWT 2
F JColorChooser NICHT im Dialog AWT, Swing, JavaFX & SWT 12
C Swing Mit jTree ein Ordneröffnen Dialog machen? Und Ordner Inhalt auslesen? AWT, Swing, JavaFX & SWT 4
N SWT Dialog mit swt-widgets AWT, Swing, JavaFX & SWT 5
L AWT Daten vom Dialog an Frame senden AWT, Swing, JavaFX & SWT 3
Lurch Swing Dialog erbt von Dialog? AWT, Swing, JavaFX & SWT 28
eQuest Durchsuchen Dialog AWT, Swing, JavaFX & SWT 6
D ausgewählte Textstellen scheinen durch Dialog durch AWT, Swing, JavaFX & SWT 7
S Modalen Dialog nachbauen..? AWT, Swing, JavaFX & SWT 4
E Swing Rückgabe eines Wertes aus einem Dialog zu einem Dialog AWT, Swing, JavaFX & SWT 4
W Swing Problem beim Passwort Dialog AWT, Swing, JavaFX & SWT 4
T Dialog ohne Frame, direktes paint in graphics AWT, Swing, JavaFX & SWT 5
C requestFocus bei modalem Dialog AWT, Swing, JavaFX & SWT 3
5 Mod.Dialog reagiert n.auf ActionListener seiner Komponenten AWT, Swing, JavaFX & SWT 4
A Bitte warten Dialog AWT, Swing, JavaFX & SWT 4
G SWT Dialog AWT, Swing, JavaFX & SWT 7
GilbertGrape EXIT_ON_CLOSE in Dialog AWT, Swing, JavaFX & SWT 3
T JFileChooser: beim Save Dialog einen Dateinamen vorgeben? AWT, Swing, JavaFX & SWT 6
K Druck-Dialog AWT, Swing, JavaFX & SWT 4
D JTable nach Öffnen-Dialog umbaun AWT, Swing, JavaFX & SWT 5
K Dialog schliesst sich nicht. Warum? AWT, Swing, JavaFX & SWT 11
K Automatisch einen Dialog schliessen AWT, Swing, JavaFX & SWT 15
J dialog AWT, Swing, JavaFX & SWT 5
H nicht modaler Dialog verdeckt modalen Dialog AWT, Swing, JavaFX & SWT 5
S Probl. bei Java Programm - Dialog zum Bearbeiten von Bildern AWT, Swing, JavaFX & SWT 4
W Wie macht man so nen Settings Dialog AWT, Swing, JavaFX & SWT 2
K Datei öffnen Dialog AWT, Swing, JavaFX & SWT 5
K Dialog aus einem Dialog öffnen AWT, Swing, JavaFX & SWT 4
S preference dialog öffnen AWT, Swing, JavaFX & SWT 8
spacegaier Fehler beim Aufrufen von Dialog aus ActionListener AWT, Swing, JavaFX & SWT 12
T DIALOG für BEENDEN AWT, Swing, JavaFX & SWT 11
N Dialog text bis zum nächsten öffnen sichern AWT, Swing, JavaFX & SWT 4
G Dialog ohne Titelleiste AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben