2013-07-07 9 views
1

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

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

enter image description here

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

enter image description here

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

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

ответ

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(); } 
         }); 
      } 
     }); 

 Смежные вопросы

  • Нет связанных вопросов^_^