Как отключить родительский узел в javafx при печати? - PullRequest
0 голосов
/ 01 марта 2019

Я создал программу, которая декодирует строки base64 и отображает изображение, используя множество fxml / javafx.Я реализую кнопку Print Image, которая берет данные из узла imageView и отправляет их на принтер.

Я хочу нажать кнопку Print Image, чтобы отключить все кнопки во время процесса печати.Пока я не могу этого сделать, несмотря на то, что попробовал несколько вещей:

Вот попытка просто отключить отдельную кнопку:

// upon Print Image button pressed
UploadButton.setDisable(true);
if (printingComplete) {
UploadButton.setDisable(false);
}

Это не работает.Я не получаю никаких ошибок.Она просто не отключает соответствующую кнопку.

Вот попытка захватить родительский узел и отключить его, чтобы отключить все кнопки:

// upon Print Image button pressed
Node node = imageDisplay;
    while (node != null) {
    node = node.getParent();
    }
    Node parentNode = node;
    parentNode.setDisable(true);

Это также не работает,Нет ошибок, просто нет изменений в функциональности кнопки.

Где я тут ошибаюсь?

Редактировать: Решение опубликовано в комментариях

1 Ответ

0 голосов
/ 01 марта 2019

Попробуйте этот код, чтобы отключить ВСЕ кнопки в вашем контейнере ( root в моем случае):

root.getChildren().forEach(node -> {
            if(node instanceof Button){
                node.setDisable(true);
            }
        });

Сделайте то же самое, чтобы включить их, просто замените

node.setDisable(true);

с

node.setDisable(false);

Примечание. В моем приложении реализована похожая функция, ваша идея «отключения функций» с помощью «отключения кнопок» может быть не столь эффективной,могут быть другие узлы на вашей стадии, которые запускают событие.
Способ реализации функции «отключения»:

  1. Создайте пустой контейнер (не видимый) над всеми остальными (AnchorPane в моемcase)
  2. Установите% на его прозрачность (серый фильтр в моем случае), используя css:

-fx-background-color: linear-Gradient (вправо, rgba (72,85, 99, 0.69), rgba (41, 50, 60, 0.69));

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

После того, как вы закончите,Вы отключаете его видимость.

Таким образом, вы будете закрывать кнопку X в окне, если вы используете недекорированную сцену, поэтому пользователи не могут закрыть приложение до завершения процесса (если они не нажмут ALT + F4 на клавиатуре).
Надеюсь, это поможет!

...