изменить цвет функции disableProperty () / как отключить нажатие на сцену - PullRequest
0 голосов
/ 11 июня 2018

Здравствуйте, это мой первый запрос в стеке.У меня проблема с функцией disablebleProperty().Это делает мой Stage темно-серым, и это выглядит ужасно.Как я могу отключить нажатие на мою сцену, когда работает Task, как показано в следующем коде:

buttonName.setOnAction((event) -> {

    Task task = new Task() {

        @Override
        protected Integer call() throws Exception {
            try {

                buttonName.getScene().setCursor(Cursor.WAIT);
                buttonName.getScene().getRoot().disableProperty().bind(primaryStage.getScene().cursorProperty().isEqualTo(Cursor.WAIT));

                anotherFunction();
            } catch (Exception ex) {

                ex.printStackTrace();
            } finally {
                buttonName.getScene().setCursor(Cursor.DEFAULT);
            }
            return null;
        }
    };
    Thread th = new Thread(task);
    th.setDaemon(true);
    th.start();
});

1 Ответ

0 голосов
/ 11 июня 2018

Вы не должны обновлять пользовательский интерфейс из потока, отличного от потока приложения JavaFX.Поскольку Task.call запускается в отдельном потоке, вы не должны запускать там код.Также связывание со свойством curser вместо вызова setDisable(false) кажется плохой идеей, тем более что вы никогда не отменяете привязку свойства.

Используйте обработчик событий для onSucceeded для обработки успешного завершения задачи.(onFailed и onCanceled доступны для различных способов завершения вашей задачи, чего не произойдет в фрагменте кода, который вы разместили.)

buttonName.setOnAction((event) -> {
    buttonName.getScene().setCursor(Cursor.WAIT);
    buttonName.setDisable(true);
    Task<Void> task = new Task<Void>() {

        @Override
        protected Void call() throws Exception {
            try {
                anotherFunction();
            } catch (Exception ex) {

                ex.printStackTrace();
            }
            return null;
        }
    };
    task.setOnSucceeded(evt -> {
        buttonName.getScene().setCursor(Cursor.DEFAULT);
        buttonName.setDisable(true);
    });
    Thread th = new Thread(task);
    th.setDaemon(true);
    th.start();
});

Чтобы отключить другие элементы управления в сцене, вывместо этого можно отключить / повторно включить корень сцены:

buttonName.getScene().getRoot().setDisable(newValue);

Чтобы предотвратить выделение серым цветом, JavaFX применяется к отключенным элементам управления (установка непрозрачности до 0,4), вы можете применить другую непрозрачность с более высоким приоритетом, например, установивнепрозрачность из кода

buttonName.setOpacity(1);

или путем применения стиля с использованием пользовательской таблицы стилей

style.css

*:disabled {
    -fx-opacity: 1;
}

инициализация сцены

scene.getStylesheets().add("style.css");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...