2017-01-02 3 views
0

Я столкнулся с проблемой. Я создаю программу для клиента. В программе у меня есть специальная кнопка «закрыть/закрыть», для которой требуется пароль для правильного закрытия. Но альтернативный (и менее безопасный) способ закрыть программу - это нажать красную кнопку или кнопку «X»: верхний правый (Windows) или верхний левый (Mac).Отключение красной кнопки «X» от закрытия всей программы JavaFX с Java8?

Я не хочу, чтобы кнопка красного x фактически закрывала всю программу. Что я хотел бы знать: возможно ли полностью отключить красную кнопку «x» от закрытия всей программы? Если возможно, может кто-то предоставить код для этого?

Что я использую: IntelliJ IDEA (Ultimate), JavaFX с Java 8, Dev. Язык: Java

+0

«Я не хочу, чтобы кнопка красного x фактически закрывала всю программу». Можете ли вы пояснить, что вы хотите здесь? Вы хотите, чтобы он все еще закрывал окно, но вы хотите, чтобы программа продолжала работать, когда окно закрыто? Вам просто нужно 'Platform.setImplicitExit (false);' если это то, что вы имеете в виду. –

ответ

1

Добавить обработчик события onCloseRequest событие этапа. Это позволяет вам не закрывать окно, потребляя событие и вместо этого выполняя собственную процедуру выключения:

private void shutdown(Stage mainWindow) { 
    // you could also use your logout window/whatever here instead 
    Alert alert = new Alert(Alert.AlertType.NONE, "Really close the stage?", ButtonType.YES, ButtonType.NO); 
    if (alert.showAndWait().orElse(ButtonType.NO) == ButtonType.YES) { 
     // you may need to close other windows or replace this with Platform.exit(); 
     mainWindow.close(); 
    } 
} 

@Override 
public void start(Stage primaryStage) { 
    primaryStage.setOnCloseRequest(evt -> { 
     // prevent window from closing 
     evt.consume(); 

     // execute own shutdown procedure 
     shutdown(primaryStage); 
    }); 

    StackPane root = new StackPane(); 

    Scene scene = new Scene(root, 100, 100); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 
+0

Опять же, у меня уже есть специальная кнопка закрытия, которая приводит к новому окну (этап), который просит человека ввести «Выключить код» - выдается кнопкой setOnAction (ActionEvent e) -> {}. Эта информация будет знать только сотрудники. Я хочу, чтобы, если клиент случайно (или намеренно) нажимает красный X, он приводит их к тому же месту, что и реализованный «Shut down». Я не хочу дублировать сцену, сцену и т. Д. Я просто хочу, чтобы программа сделала это: красный x нажал? .. перейдите в setOnAction (ActionEvent e) ->, который обрабатывает процедуру ручного отключения. –

+0

@YuriKhechoyan И вы пишете этот комментарий, потому что ??? Если вы показываете «Alert» или запускаете какую-либо другую процедуру, позволяющую пользователю закрыть программу, это зависит от вас. Вы также можете заменить сцену и вместо этого показать какой-то экран выхода, если это так, как вы хотите справиться с этим ... – fabian

+0

Это работает! Еще раз спасибо! Мне просто нужно было немного поработать с кодом, который вы предоставили! Очень признателен! –

Смежные вопросы