在开发JavaFX应用程序项目期间,这是我的第一个真正的树桩画家,我什至不知道如何正确地说出我要做什么,因为我不知道我所使用的技术名称。我试图利用。
在我的应用程序中,我有多个自定义组件,因此可以构建更复杂的场景。该问题涉及3个控制组件。包含一个MenuComponent和一个activityComponent(均为自定义)的PrimaryControl组件(SplitPane),它们会根据在MenuComponent中设置的单选按钮的选择进行更改。
当更改ToggleGroup中的单选按钮(来自该组件)时,如何使MenuControl类“发出”已执行的动作,然后该单选按钮将由父组件PrimaryControl中的函数处理,以便可以更改activityComponent是否可见/活动?忍受我。
primary_control.fxml
<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.fxml
<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 - create action handler for custom component in FXML的另一个事件。
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");
}
}
在此先感谢您帮助我的人。