Хобрук: Ваш путь к мастерству в программировании

Как отключить родительский узел в javafx при печати?

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

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

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

// 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);

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

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

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


  • / вы пытались удалить его, а не отключать 01.03.2019
  • Заглавные буквы в данном случае несколько раздражают. Предполагая, что это фактически отображаемые поля: похоже, вы не вызываете/не выполняете написанные вами строки кода. 01.03.2019
  • Авторское решение: я попытался просто вызвать кнопки по отдельности, а не родительский узел, и решил, что вызываю их неправильно. Затем я дал каждой кнопке fxid в SceneBuilder и импортировал их в файл контроллера как таковой: @FXML private Button uploadButton, затем я просто отключил каждую кнопку с помощью ее имени и метода: uploadButton.setDisable(true); Работает как шарм. 02.03.2019

Ответы:


1

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

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

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

node.setDisable(true);

с

node.setDisable(false);

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

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

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

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

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

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

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

Блоги, которые обязательно нужно прочитать специалистам по обработке и анализу данных :
Добро пожаловать в 2020! Новый год и новое десятилетие. Поскольку мы начинаем новый и захватывающий год в науке о данных, важно, чтобы профессионалы открыли для себя лучшие блоги по науке о..

Универсальный базовый доход
Универсальный базовый доход В последние годы концепция всеобщего базового дохода (УБД) набирает обороты как все более эффективное решение для борьбы с растущим неравенством доходов и..

Освоение Python для анализа финансовых данных: руководство по получению данных о доходах от акций
Если вы хотите научиться получать данные о доходах от акций с помощью Python, то это руководство для вас! В этой статье мы рассмотрим несколько примеров сбора данных о доходах от акций. Мы..

Абсолютно имеет смысл.
Абсолютно имеет смысл. Мой репетитор даже предложил то же самое. Одна проблема, с которой я столкнулся, заключается в том, что для каждой из категорий не было ярлыка «хорошо». Если я перебираю..

МАШИННОЕ ОБУЧЕНИЕ И EDA
Каковы шаги в машинном обучении Определение проблемы Генерация гипотез Извлечение данных Исследование данных Прогнозное моделирование Развертывание модели Зачем нам ЭДА? Идентификация..

В чем основные различия между ReactJS и React-Native?
В чем основные различия между ReactJS и React-Native? Что я узнал, создавая веб-приложения, а затем мобильные приложения на React React-Native существует уже около 2 лет и стал..

LeetCode — Умножение строк
Постановка задачи Даны два неотрицательных целых числа num1 и num2 , представленные в виде строк, вернуть произведение num1 и num2 , а также представлен в виде строки. Примечание . Вы..