Arhn - архитектура программирования

Отключить перемещение оповещения javafx

У меня проблема с моим интерфейсом «Хотите выйти?».

На сегодняшний день я могу переместить окно оповещения куда хочу, что я хотел бы изменить - желательно зафиксировав оповещение в заданном положении (в центре экрана).

Проблема с возможностью перемещения этого оповещения заключается в том, что в настройках с более чем одним экраном вы можете перемещать его куда угодно (например, за пределы игрового интерфейса).

    Button btExit = new Button("Exit Game");
    btExit.setMinWidth(100);
    buttonGrid.add(btExit, 0, 5);
    btExit.setOnAction(new EventHandler<ActionEvent>() 
    {
        @Override
        public void handle(ActionEvent event) 
        {
            Alert alert = new Alert(AlertType.CONFIRMATION);
            alert.setTitle("");
            alert.initModality(Modality.APPLICATION_MODAL);
            alert.initOwner(primaryStage);
            alert.setHeaderText("Quit Game");
            alert.setContentText("Are you sure?");

            Optional<ButtonType> result = alert.showAndWait();
            if (result.get() == ButtonType.OK){
                System.exit(1);
            }else 
            {
                alert.close();
            }

        }
    });
07.01.2017

  • Что изменилось, что диалоговое окно Alert теперь можно перемещать, если раньше нельзя было? 07.01.2017
  • И вы хотите, чтобы ваше окно оповещения оставалось в пределах вашего исходного окна? 07.01.2017
  • Диалоговое окно с предупреждением можно было перемещать и раньше, проблема в том, что я хочу, чтобы он оставался там, где он становится видимым, и пользователь также не должен перемещать его. 07.01.2017

Ответы:


1

Если вы хотите запретить пользователю перемещать диалоговое окно, просто установите стиль UNDECORATED, который удаляет границу окна, которую пользователь может использовать для перемещения вокруг предупреждения (а также кнопку x, но у пользователя есть альтернативный способ закрытия диалог):

@Override
public void start(Stage primaryStage) {
    Button btn = new Button("Show alert");
    btn.setOnAction((ActionEvent event) -> {
        Alert alert = new Alert(AlertType.CONFIRMATION);
        alert.getDialogPane().setStyle("-fx-border-color: black;");
        alert.initModality(Modality.APPLICATION_MODAL);

        alert.initStyle(StageStyle.UNDECORATED);

        alert.initOwner(primaryStage);
        alert.setHeaderText("Quit Game");
        alert.setContentText("Are you sure?");

        Optional<ButtonType> result = alert.showAndWait();
        if (result.orElse(null) == ButtonType.OK) {
            Platform.exit();
        }
    });

    StackPane root = new StackPane();
    root.getChildren().add(btn);

    Scene scene = new Scene(root, 600, 400);

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



Некоторые другие модификации, которые я сделал здесь:

  • Заменять

    System.exit(1);
    

    с

    Platform.exit();
    

    Чтобы закрыть приложение более изящно. В конце концов, код состояния 1 указывает на ненормальное завершение.

  • Удалять

    else 
    {
        alert.close();
    }
    

    в этом никогда нет необходимости, так как showAndWait все равно возвращается только после закрытия Alert...

  • Использовал

    result.orElse(null)
    

    чтобы получить значение без ошибки, даже если Optional пусто (не уверен на 100%, что это может произойти в этом случае, но это не помешает сделать это так).

07.01.2017
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..