Moin !
Ich habe aktuell ein Brett vorm Kopf und komme einfach nicht auf eine einfache Lösung.
Java FX Anwendung mit strikter Trennung zwischen der (programmatisch erstellten) View und dem Controller.
Folgendes sei gegeben:
Die View bietet einen Button an der irgendwas machen soll, zum Beispiel einen Thread starten
Der Controller möchte eine Bestätigung das er das wirklich machen soll und fordert die View auf einen Bestätigungsdialog anzuzeigen.
Dieser Dialog soll per Fade in und Fade out animiert werden. FadeOut wird gestartet wenn der Button des Dialogs gedrückt wird, der finale Rückgabewert wird unmittelbar nach Start der Transition an den Controller zurückgegeben. Der Controller aber soll den Thread erst starten wenn die Animation beendet ist.
Im Prinzip bietet sich die setOnFinished Methode der Transition an um auf die Beendigung der Animation zu warten, aber in dieser kann ich keinen Rückgabewert für die showConfirmationDialogue() Methode ausgeben, da dies in einem Missing Return Statement Fehler resultiert.
2 funktionierende Lösungen habe ich anzubieten, glaube aber das diese beide nicht ideal sind.
1. Die showConfirmationDialogue Methode schlafen schicken, wobei w die Länge der Transition wäre.
2. Die showConfirmationDialogue() gibt keine boolean zurück, sondern ruft in der setOnFinished Methode der Transition eine neue Methode im Controller auf.
Das würde allerdings den Umfang der Controller Klasse künstlich aufblähen (2 public Methoden statt 1). Nehmen wir einmal an es gäbe (aus welchen Gründen auch immer) 50 verschiedene Aktionen in dieser View die eine Bestätigung (oder Parametereingabe) über einen Dialog benötigen, dann wären das 50 zusätzliche Methoden.
Ich hoffe ihr konntet meinen Gedankengängen ohne vollständigen Code folgen und mein Problem erkennen. Falls nicht würde ich nochmal kompletten Code posten.
Dank euch !
Grüße
Ich habe aktuell ein Brett vorm Kopf und komme einfach nicht auf eine einfache Lösung.
Java FX Anwendung mit strikter Trennung zwischen der (programmatisch erstellten) View und dem Controller.
Folgendes sei gegeben:
Die View bietet einen Button an der irgendwas machen soll, zum Beispiel einen Thread starten
Java:
btn.setOnAction(e -> {
controller.btnActionStartThread();
});
Der Controller möchte eine Bestätigung das er das wirklich machen soll und fordert die View auf einen Bestätigungsdialog anzuzeigen.
Code:
boolean exit = view.showConfirmationDialogue();
// if true starte Thread
Dieser Dialog soll per Fade in und Fade out animiert werden. FadeOut wird gestartet wenn der Button des Dialogs gedrückt wird, der finale Rückgabewert wird unmittelbar nach Start der Transition an den Controller zurückgegeben. Der Controller aber soll den Thread erst starten wenn die Animation beendet ist.
Im Prinzip bietet sich die setOnFinished Methode der Transition an um auf die Beendigung der Animation zu warten, aber in dieser kann ich keinen Rückgabewert für die showConfirmationDialogue() Methode ausgeben, da dies in einem Missing Return Statement Fehler resultiert.
Code:
public boolean showConfirmationDialogue(){
boolean result;
//erstelle Dialog und nach dem klicken die FadeOut Transition
transition.setOnFinished(e->{
return result; //
});
//missing return statement
}
2 funktionierende Lösungen habe ich anzubieten, glaube aber das diese beide nicht ideal sind.
1. Die showConfirmationDialogue Methode schlafen schicken, wobei w die Länge der Transition wäre.
Code:
public boolean showConfirmationDialogue(){
boolean result;
//erstelle Dialog und nach dem klicken die FadeOut Transition
Thread.sleep(w);
return result();
}
2. Die showConfirmationDialogue() gibt keine boolean zurück, sondern ruft in der setOnFinished Methode der Transition eine neue Methode im Controller auf.
Code:
t.setOnFinished(e-> {
controller.btnActionStartThreadConfirmation(result)
})
Das würde allerdings den Umfang der Controller Klasse künstlich aufblähen (2 public Methoden statt 1). Nehmen wir einmal an es gäbe (aus welchen Gründen auch immer) 50 verschiedene Aktionen in dieser View die eine Bestätigung (oder Parametereingabe) über einen Dialog benötigen, dann wären das 50 zusätzliche Methoden.
Ich hoffe ihr konntet meinen Gedankengängen ohne vollständigen Code folgen und mein Problem erkennen. Falls nicht würde ich nochmal kompletten Code posten.
Dank euch !
Grüße