当前位置: 首页 > 知识库问答 >
问题:

如何从对子fxml组件执行操作中更改父fxml内容?

梁德馨
2023-03-14
<BorderPane prefHeight="400.0" prefWidth="1000.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.nikunj.drclinic.controller.RootLayoutController">
<center>
  <AnchorPane fx:id="dashboard" BorderPane.alignment="CENTER" />
</center>
<top>
  <HBox BorderPane.alignment="CENTER">
     <children>
        <fx:include fx:id="mainMenu" source="MainMenuBar.fxml" />
     </children>
  </HBox>
</top>
</BorderPane>

为此使用的控制器是RootLayoutController.java

public class RootLayoutController {

 @FXML
 private MainMenuBarController mainMenuBarController;

 @FXML
 private AnchorPane dashboard;

 @FXML
 private void initialize() {
    // Initialize the person table with the two columns.
 }
}

从这个MainMenubar.fxml文件内部也会加载,它是子fxml文件

<AnchorPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.nikunj.drclinic.controller.MainMenuBarController">
   <children>
      <MenuBar layoutY="2.0" prefWidth="1000.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
        <menus>
          <Menu mnemonicParsing="false" text="File">
            <items>
              <MenuItem mnemonicParsing="false" onAction="#closeApplication" text="Close" />
            </items>
          </Menu>
          <Menu mnemonicParsing="false" text="Patient Detail">
            <items>
              <MenuItem fx:id="addPatiendMenuItem" mnemonicParsing="false" onAction="#addPatient" text="Add Patient" />
                  <MenuItem mnemonicParsing="false" text="Find Patient" />
            </items>
          </Menu>
        </menus>
      </MenuBar>
   </children>
</AnchorPane>

此MainMenubar.fxml的控制器文件为MainMenubarController.java

public class MainMenuBarController {

 @FXML
 private MenuItem addPatiendMenuItem;

 @FXML
 private MenuItem findPatientMenuItem;

 @FXML
 public void closeApplication(){
    System.exit(0);
 }

 @FXML
 public void addPatient(ActionEvent event){

 }
}

我花了很多时间去寻找,如何从对子控制器组件执行的操作中更改父控制器组件?

共有1个答案

司空修贤
2023-03-14

MainMenubarController中创建一个属性,该属性表示您正在更改的状态(“视图状态”)。要使这变得有意义,需要对应用程序有更多的了解,但您可以执行以下操作:

public class MainMenuBarController {
    private final BooleanProperty addPatientRequested = new SimpleBooleanProperty();
    public BooleanProperty addPatientRequestedProperty() {
        return addPatientRequested ;
    }
    public final boolean isAddPatientRequested() {
        return addPatientRequestedProperty().get();
    }
    public final boolean setAddPatientReqested(boolean requested) {
        addPatientReqestedProperty().set(requested);
    }

    @FMXL
    private void addPatient(ActionEvent event) {
        setAddPatientRequested(true);
    }
}

然后在“父”控制器中执行

public class RootLayoutController {

 @FXML
 private MainMenuBarController mainMenuBarController;

 @FXML
 private AnchorPane dashboard;

 @FXML
 private void initialize() {
    // Initialize the person table with the two columns.
    mainMenuBarController.addPatientRequestedProperty().addListener((obs, wasRequested, isNowRequested) -> {
        if (isNowRequested) {
            // code to execute...
        }
    });
 }
}

根据应用程序逻辑,您可能需要一个不同的属性,例如在mainmenubarcontrollerdefine中

ObjectProperty<Node> display = new SimpleObjectProperty<>();
 类似资料:
  • 我需要你的帮助来解决这个问题,我想从不同的包中包含子fxml。如果child.fxml在同一位置,我可以将它们包含到parent.fxml中,但不知道如何将child.fxml添加到parent.fxml中,当两者都在不同的位置/包中时。 先谢谢你。

  • 大家好,我是fxml的新手,所以请忽略我的愚蠢的问题,这里有几个东西,我尝试了两天,但没有成功 > 从表中删除空白,即表大小应达到可用行数(行数不同) 当用户单击表行(任何显示值)时,新的fxml文件将在定位窗格(显示tableview)中打开,分配给tableview,但我想在主视图中显示它(这里显示的是整个表和两个文本字段以及主堆栈后面的搜索按钮)主视图(其他只有标题和侧栏的fxml文件) 如

  • null 我是否可以从子控制器-b更改父FXML-A中标签的文本?

  • 控制器类别:包装样品;

  • 场景:我有一个名为L的父窗口,并在此窗口上有一个。我正在通过创建另一个名为的窗口来编辑这些行结果,并将行数据填充到这个FXML字段中,现在在从第二个窗口进行编辑后,如果保存,我需要用最新的数据更新父表。但是当我调试时,我的表列表用最新的数据更新,并且不在窗口中显示。那么如何从不同的控制器更新表视图呢? 并且在我的父类中initialize方法具有以下代码: @override public voi

  • 我有两个组件:父组件,我想改变子组件的状态: 和子组件: 我需要从父组件更改子组件的打开状态,或者当单击父组件中的按钮时,从父组件调用子组件的toggleMenu()?