javafx - 在 JavaFX 8 中使用来自另一个表单/ Controller 的控件

标签 javafx javafx-8

我有一个 JavaFX 8 应用程序...

MainApp.java

    Parent root;
    root = FXMLLoader.load(getClass().getResource("/fxml/MainForm.fxml"));
    Scene scene = new Scene(root);        
    stage.setScene(scene);
    stage.show();

MainForm.fxml 使用 fx:controller="MainController" 定义其 Controller ,并且 Controller 本身包含一个文本字段 textFieldUsername

@FXML
protected TextField textFieldUsername;

然后,有第二个表单 AuxForm.fxml 和另一个 Controller fx:controller="AuxController"。第二种表单包含在 MainForm.fxml 中,如下所示:

<content>
  <fx:include source="AuxForm.fxml" />
</content>

现在我需要获取textFieldUsername的值。第二个 Controller 需要这个值,但我不知道如何做到这一点。我的第一个想法是 public class AuxController extends MainController 以使所有控件可用,但这不起作用。

最佳答案

fx:id 添加到 fx:include:

<content>
  <fx:include fx:id="auxForm" source="AuxForm.fxml" />
</content>

现在您可以将所包含的 fxml 的 Controller (“嵌套 Controller ”)注入(inject)到“主 Controller ”中。假设 AuxForm.fxmlfx:controller="AuxController" 你可以这样做:

public class MainController {

    @FXML
    private AuxController auxFormController ;


    public void initialize() {
        // call any methods you need on auxFormController ...

        // ...
    }

    // ...
}

此处的规则是,将单词 Controller 附加到 fx:id 的值,以形成“嵌套 Controller ”的字段名称。

现在您可以在 AuxController 中定义您需要的任何方法(例如 public String getUsername() {...}),并在需要时从主 Controller 调用它们.

例如,如果您需要向 AuxController 提供数据,您可以在那里提供一个属性,您可以从 MainController 设置或绑定(bind)该属性:

public class AuxController {

     private final StringProperty username ;

    public StringProperty usernameProperty() {
        return username ;
    }

    //...
}

然后在主 Controller 的initialize()方法中你可以这样做

auxFormController.usernameProperty().bind(
    textFieldUsername.textProperty());

现在username.get()将为您提供文本字段中的文本。

请参阅FXML documentation了解更多详情。

关于javafx - 在 JavaFX 8 中使用来自另一个表单/ Controller 的控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36728775/

相关文章:

Javafx饼图不显示任何数据

java - 围绕自定义点旋转 javafx ImageView

javafx从mysql接收图像设置为 ImageView

css - 如何通过 CSS 中的悬停选择器更改 JFXButton 中的 Font Awesome 字形颜色?

java - TornadoFX 中设置 PrimaryStage 或 Scene 属性的方法

java - JavaFX 8 中的一般异常处理

java - 动态 Javafx View 的 Controller 类

JavaFX 可编辑表格 View : How to change size and css of the TextField inside of TableCell?

带有java FX的Spring数据jpa

java - IdentitySet/IdentityHashSet(使用 IdentityHashMap)