Per aggirare questo problema, è possibile aggiungere un pulsante di chiusura nascosta alla finestra di dialogo.
import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.stage.Stage;
public class DialogClosure extends Application{
@Override
public void start(Stage stage) throws Exception {
Button openDialog = new Button("Open Dialog");
openDialog.setOnAction(event -> {
Dialog dialog = new Dialog();
dialog.getDialogPane().getButtonTypes().add(ButtonType.CLOSE);
Node closeButton = dialog.getDialogPane().lookupButton(ButtonType.CLOSE);
closeButton.managedProperty().bind(closeButton.visibleProperty());
closeButton.setVisible(false);
dialog.showAndWait();
});
stage.setScene(new Scene(openDialog));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Poi la finestra si riunisce sia la vostra esigenza di poter essere chiuso tramite vicino icona della finestra del sistema a finestre nativo così come il requisito JavaFX dialogo di includere un pulsante di chiusura nella finestra di dialogo per l'icona vicino al lavoro.
In alternativa, è possibile utilizzare uno stage con showAndWait anziché Dialog. Uno stage senza pulsanti inclusi è chiudibile tramite l'icona della finestra chiusa del sistema di finestre.
Come è logico che sia necessario implementare un pulsante di chiusura per poter utilizzare un altro pulsante di chiusura? Perché devi avere entrambi? C'è qualcos'altro che posso usare se ho bisogno di restituire un risultato dalla finestra senza volere alcun pulsante (eccetto quelli nella barra del titolo, come "x"). Inizialmente ho creato la mia classe da zero per implementare questo comportamento, ma non sono riuscito a restituire un risultato. –
@JonatanStenbacka L'unica soluzione sarebbe implementare il proprio 'FXDialog' .. ma non lo consiglierei. Ma non riesco a immaginare un dialogo senza pulsanti ...? – eckig
Confermando che questa è l'unica opzione di lavoro che ho visto. Fantastico grazie. – JonasAnon