我是javafx的新手,我试图在每个标签页上设置一个控制器。 我找到了这个答案:https://stackoverflow.com/a/19889980/393984让我这样做:
Main.fxml
<TabPane fx:controller="sample.Controller" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" tabClosingPolicy="UNAVAILABLE" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/null">
<tabs>
<Tab text="Configuration">
<content>
<fx:include fx:id="mConfigTabPage" source="configTab.fxml"/>
</content>
</Tab>
<Tab text="TODO">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
</tabs>
</TabPane>
configTab.fxml
<Pane fx:controller="sample.ConfigController" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/null" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Label layoutX="23.0" layoutY="22.0" text="API Key :" />
<TextField layoutX="95.0" layoutY="18.0" fx:id="mAPIKey" />
</children>
</Pane>
Controller.java
public class Controller {
private Stage mStage;
@FXML
private ConfigController mConfigTabPage;
public void Controller(){}
public void setStage(Stage stage)
{
mStage = stage;
}
@FXML
public void initialize() {
System.out.println("CONTROLLER");
}
}
ConfigController.java
public class ConfigController {
public void ConfigController(){}
@FXML
public void initialize() {
System.out.println("CONFIG CONTROLLER");
}
}
如果我删除
,我的程序就会启动@FXML
private ConfigController mConfigTabPage;
在主控制器中。
但是一旦我添加它,我有以下例外:
java.lang.IllegalArgumentException:无法设置 sample.ConfigController字段sample.Controller.mConfigTabPage到 javafx.scene.layout.AnchorPane
所以我猜测javafx试图将我的控制器转换为AnchorPane并导致问题。
如何在主控制器中引用每个窗格的控制器,我该怎么做?
答案 0 :(得分:1)
如果您希望fx:id="something"
的 controller 将后缀Controller
附加到Java成员字段。所以你必须使用:
@FXML
private ConfigController mConfigTabPageController;
请参阅reference。