Чтобы обойти это, вы можете добавить скрытую кнопку закрытия в диалог.
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);
}
}
Затем диалог отвечает как ваше требование того, чтобы быть в состоянии быть закрыто через окно закрыть значок родной оконной системы, а также требования JavaFX Диалог включения кнопки закрытия в диалоговом окне для закрытия значка на работу.
В качестве альтернативы вы можете использовать Stage с showAndWait вместо Dialog. Этап без каких-либо включенных кнопок закрывается с помощью значка окна закрытия окна окна.
Как вы понимаете, что вам нужно использовать кнопку закрытия, чтобы использовать другую кнопку закрытия? Почему у вас должны быть оба? Есть ли что-нибудь еще, что я могу использовать, если мне нужно вернуть результат из окна без каких-либо кнопок (кроме тех, которые указаны в строке заголовка, например «x»). Первоначально я создал свой собственный класс с нуля, чтобы реализовать это поведение, но мне не удалось вернуть результат. –
@JonatanStenbacka Единственное решение - реализовать собственный 'FXDialog' .. но я бы не рекомендовал этого. Но я не могу представить Диалог без кнопок ...? – eckig
Подтверждение того, что это единственный рабочий параметр, который я видел. Удивительная благодарность. – JonasAnon