В разгар разработки проекта приложения JavaFX это мой первый настоящий тупик, и я даже не знаю, как правильно сказать, что я пытаюсь сделать, потому что я не знаю названий техник, которые я использую ». Я пытаюсь использовать.
В моем приложении есть несколько пользовательских компонентов, поэтому я могу построить более сложную сцену. Эта проблема включает в себя 3 компонента управления; компонент PrimaryControl (SplitPane), который содержит MenuComponent и ActivityComponent (оба настраиваемые), который изменяется в зависимости от выбора переключателей, установленных в MenuComponent.
Как я могу заставить класс MenuControl «излучать» выполнил действие, когда радиокнопка в ToggleGroup (из этого компонента) была изменена, что затем будет обработано функцией в родительском компоненте PrimaryControl, чтобы он мог изменить, какой ActivityComponent является видимым / активным? Потерпи меня.
primary_control.f xml
<fx:root type="javafx.scene.layout.VBox" xmlns:fx="http://javafx.com/fxml">
<MenuControl onToggleGroupButtonSelectionChanged="#onChange"/>
<ActivityOneControl fx:id="one" isVisible="true"/>
<ActivityTwoControl fx:id="two" isVisible="false"/>
...
</fx:root>
menu_control.f xml
<fx:root type="javafx.scene.layout.VBox" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/10.0.2-internal">
<GridPane alignment="CENTER" hgap="10" vgap="10">
<padding><Insets bottom="25" left="25" right="25" top="15" /></padding>
<Label text="Select A Task" GridPane.columnIndex="0" GridPane.rowIndex="0">
<font><Font name="System Bold" size="13.0" /></font>
</Label>
<fx:define>
<ToggleGroup fx:id="menuSelection"/>
</fx:define>
<RadioButton fx:id="one" text="one" GridPane.columnIndex="0" GridPane.rowIndex="1" toggleGroup="$menuSelection">
</RadioButton>
<RadioButton fx:id="two" text="two" GridPane.columnIndex="0" GridPane.rowIndex="2" toggleGroup="$menuSelection">
</RadioButton>
<RadioButton fx:id="three" text="three" GridPane.columnIndex="0" GridPane.rowIndex="3" toggleGroup="$menuSelection">
</RadioButton>
</GridPane>
</fx:root>
Как создать слушателя в моем MenuControl java класс, который сможет обнаружить изменение выбора ToggleGroup, а затем передать это изменение на onToggleGroupButtonSelectionChanged="#onChange"
, чтобы я мог обработать выбор кнопки из класса PrimaryControl java? Я помню, как делал подобные вещи в Angular, и это было довольно легко, но по какой-то причине я не могу найти никакой информации о том, как это сделать, - Java. Это то, что известно как внедрение зависимостей?
Я нашел эту ссылку и попытался реализовать ее для своей проблемы, но безуспешно, так как ничего не было объяснено и прослушивалось другое событие для JavaFX 2.0 - создать обработчик действий для пользовательских компонент в F XML.
PrimaryController. java (аналогично MenuControl. java)
public class PrimaryControl extends VBox {
public DashboardControl() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("primary_control.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
} catch (IOException exception) {
throw new RuntimeException(exception);
}
}
@FXML
protected void onChange() {
System.out.println("change activity");
}
}
Заранее благодарим всех, кто мне помогает с этим.