javafx: fxml: отображать элементы дважды

Мне было интересно, есть ли простой способ клонировать элементы в FXML (например, текстовые поля), чтобы отображать их более одного раза.

Следующая ситуация:

У меня есть TabView и я хочу отображать на первой вкладке элементы X, на второй вкладке элементы Y и на третьей вкладке я хочу отображать X и Y.

Дублирование одного и того же fx:id не допускается (Netbeans говорит) и экспорт X и Y в разные файлы .fxml, так что я просто включаю их дважды, ни то, ни другое не работает. Это еще одна проблема.

Как бы вы решили это?


person hitchdiddy    schedule 26.09.2013    source источник


Ответы (2)


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

Один из способов добиться этого - реализовать собственный класс java, который расширяет компонент javafx (например, Pane или VBox), а затем в конструкторе этого класса вы загружаете FXML его макета. С FXMLLoader вы устанавливаете контроллер и корень в качестве текущего компонента и используете тег fx:root в FXML.

У вас будет компонент с классом java, который будет корнем и контроллером собственного FXML.

person zenbeni    schedule 26.09.2013

Обычно я предлагаю разделить весь .FXML на 3 разные части, которые можно поддерживать отдельно.

TabView, SplitPanes и все подобные контейнеры должны находиться в отдельной панели FXML, а каждая новая панель — в другой. В твоем случае:

  • TabView = 1 FXML
  • Вкладка 1 = 1 FXML
  • Вкладка 2 = 1 FXML

Вы можете экспортировать их таким образом, но элементам нужен контейнер, например HBox, или что-то простое (например, Pane, который вам нужно создать при запуске SceneBuilder или вашего root Parent)

person thatsIch    schedule 26.09.2013