zacytować Api Docs:
JavaFX dialogi mogą być zamknięte tylko 'nienormalnie' (jak określono powyżej) w dwóch sytuacjach:
Gdy okno ma tylko jeden przycisk, lub
Gdy okno dialogowe ma wiele przycisków, o ile jedno z nich spełnia jeden z następujących wymagań:
- Przycisk ma ButtonType, którego ButtonData jest typu ButtonData.CANCEL_CLOSE.
- Przycisk ma ButtonType którego ButtonData zwraca wartość true po wywołaniu ButtonData.isCancelButton().
...
Więc albo dodać co najmniej jeden przycisk lub kilka przycisków, a jednym z nich jest typu ButtonData.CANCEL_CLOSE
, na przykład:
Dialog<ButtonType> dialog = new Dialog<>();
dialog.getDialogPane().getButtonTypes().add(new ButtonType("Got it!", ButtonData.CANCEL_CLOSE));
dialog.setContentText("test");
dialog.showAndWait();
Edytuj:
To zachowanie jest zaimplementowane w javafx.scene.control.FXDialog.requestPermissionToClose(Dialog<?>)
, ale pokazany prawdziwy FXDialog
to HeavyweightDialog
, który nie jest publicznym interfejsem API, a więc nie jest punktem rozszerzenia.
Jak to ma sens, że trzeba zaimplementować przycisk zamykania, aby móc użyć innego przycisku zamykania? Dlaczego musisz mieć jedno i drugie? Czy jest coś jeszcze, co mogę użyć, jeśli chcę zwrócić wynik z okna, nie chcąc żadnych przycisków (z wyjątkiem tych na pasku tytułu, takich jak "x"). Początkowo stworzyłem własną klasę od podstaw, aby zaimplementować to zachowanie, ale nie udało mi się zwrócić wyniku. –
@ JonatanStenbacka Jedynym rozwiązaniem byłoby zaimplementowanie własnego 'FXDialog' .. ale nie polecam tego. Ale nie mogę sobie wyobrazić Dialog bez żadnych przycisków ...? – eckig
Potwierdzam, że jest to jedyna działająca opcja, jaką widziałem. Wielkie dzieki. – JonasAnon