В JavaFX 2.2 можно ли отключить родителя, но пусть его дети останутся не отключенными?

Эта проблема поразила меня несколько раз. Например, мне нужен графический элемент ProgressBar. узел в Button должен быть включен, но его родительская кнопка отключена. Таким образом, я мог добиться круто выглядящей кнопки «загрузки», которая запускала какую-то длительную задачу, становилась серой и отключалась, но его внутренний ProgressBar оставался четко видимым со всеми прикрепленными яркими цветами. Но когда я отключаю кнопку, драгоценный дочерний ProgressBar также отключается и становится серым.

А сегодня опять столкнулся с той же проблемой. У меня есть два Accordions, расположенных последовательно после каждого разное. В верхнем аккордеоне есть два TitledPanes, которые пользователь может расширять или сжимать по желанию. Однако в аккордеоне ниже есть только одна TitledPane, которая всегда расширяется. Эта TitledPane содержит содержимое и элементы управления, которые всегда видны пользователю. Я поместил весь этот фиксированный контент в отдельный Accordion и отдельный TitledPane, чтобы он мог сливаться с тем же видом и ощущениями, что и его кузены. Просто вставьте обычный Pane или что-то в этом роде. , тогда попытка имитировать стили кузенов была настоящей проблемой. Пожалуйста, посмотрите, как все выглядит на данный момент:

введите здесь описание изображения

Но это выглядит чертовски уродливо, когда фокус получает TitlePane фиксированного содержимого. Надпись «Отправить» загорается, как ясное голубое небо. Поэтому я попытался полностью отключить эту панель заголовка, но, как можно себе представить, кнопка также автоматически отключается:

введите здесь описание изображения

Однако, как и в случае с моим первым примером Button и ProgressBar, я просто хочу отключить Parent, но оставить Child не отключенным! Является ли это возможным?

В качестве альтернативы я мог бы просто скрыть заголовок TitledPane. Но я тоже не понял, как это сделать, и задал вопрос здесь.


person Martin Andersson    schedule 07.07.2013    source источник


Ответы (1)


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

Учитывая, что нижняя TitledPane с его заголовком «Отправить» имеет fx:id «titledPaneSend», и что у кнопки есть «кнопка» fx:id, и что класс контроллера реализует Initializable добавьте этот код в метод инициализации:

titledPaneSend.focusedProperty().addListener(new ChangeListener<Boolean>()
        {
            @Override
            public void changed(ObservableValue<? extends Boolean> ov, Boolean from, Boolean to)
            {
                if (to == true)
                    /*
                     * Just calling button.requestFocus() will make
                     * BOTH the TitledPane and the Button become
                     * focused. And apparently, this is a bug:
                     * 
                     *     http://stackoverflow.com/a/14843531/1268003
                     * 
                     * So the fix is to wrap all in a new runnable:
                     */
                    Platform.runLater(new Runnable()
                        {
                        @Override
                        public void run() {
                            button.requestFocus(); }
                        });
            }
        });
person Martin Andersson    schedule 07.07.2013