如何从锚窗格javafx获取控制器[关闭]

bq3bfh9z  于 2023-04-19  发布在  Java
关注(0)|答案(1)|浏览(144)

已关闭,该问题需要details or clarity,目前不接受回答。
**想要改进此问题?**通过editing this post添加详细信息并澄清问题。

2天前关闭。
Improve this question
我正在开发一个javafx应用程序,我需要访问场景中单个Anchorpane的控制器来调用一些函数

System.out.println(listPane.getChildren());
<This is the part that does not work VVV >
        recipeController rController = recipe.getController();
        rController.callFunction().
        listPane.getChildren().add(recipe);

我不能使用FXMLLoader,因为我只能在创建配方时访问它,并且我需要能够在创建配方后访问它
这是我试图获取控制器的recipe fxml文件

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane fx:id="recipePane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="100.0" prefWidth="100.0" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cookbook.recipeController">
   <children>
      <Label fx:id="recipeNamePane" alignment="CENTER" layoutY="-3.0" prefHeight="34.0" prefWidth="100.0" text="Name" />
      <Button layoutY="31.0" mnemonicParsing="false" prefHeight="70.0" prefWidth="100.0" text="Button" />
   </children>
</AnchorPane>
yqyhoc1h

yqyhoc1h1#

这个问题对我来说没有什么意义,它很可能表明你的架构方法和推理应用程序的方式应该改变。
(By默认值)AnchorPane没有控制器。您无法从没有控制器的对象获取控制器。
相反,FXMLLoader将创建像AnchorPane这样的对象和节点,并可以使用@FXML注解(或公共方法)将它们注入到FXML控制器中。
但是,如果您真的想这样做,您可以在注入的AnchorPane的属性中存储对控制器的引用。
假设在FXML中fx:idanchorPane,则在控制器中有:

@FXML private AnchorPane anchorPane;

public void initialize() {
    anchorPane.getProperties().add("controller", this);
}

然后从anchorPane获取控制器(将MyControllerClass更改为您使用的任何控制器):

MyControllerClass controller =
       (MyControllerClass) anchorPane.getProperties().get("controller");

相关问题