gpt4 book ai didi

java - 如何使用一个 Controller 来实现两种形式?

转载 作者:行者123 更新时间:2023-12-01 11:14:13 26 4
gpt4 key购买 nike

在使用 JavaFX 编写我的第一个应用程序时,我遇到了几个问题。这是其中之一:我有一个表格,其中包含两个表格。例如:

<GridPain>
<fx:include source="Form1.fxml"/>
<fx:include source="Form2.fxml"/>
</GridPain>

我在每个表单(Form1.fxml、Form2.fxml)中引用了相同的 Controller ,Form1 包含 TextField:

<TextField fx:id="name"/>

Form2 包含按钮:

<Button fx:id="sayYourName"/>

我在 Controller 中包含按钮和文本字段:

public class MyController implements Initializable  {
@FXML
private Button sayYourName;
@FXML
private TextField name;

@Override
public void initialize(URL location, ResourceBundle resources) {
if (name == null) {
System.out.println(true);
}

if (sayYourName == null) {
System.out.println(true);
}
}
}

请告诉我,为什么我有

true
true

如何使用一个 Controller 来处理两种表单?

最佳答案

刚开始时我遇到了这个问题,所以这里有一个建议可能会对您有所帮助。有两个单独的表单,每个表单都有自己的 Controller 。您有一个“主”表单,两个表单都加载到其中。首先加载一个这样的表单:

private VBox view1;
private Pane view2;

private View1Controller view1Controller;
private View2Controller view2Controller;

try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("form1.fxml"));
view1 = (Pane) loader.load();
view1Controller = loader.<View1Controller>getController();
} catch (IOException e) {
e.printStackTrace();
}

与 form2 类似。

您的 rootView 也将以同样的方式加载。

加载 rootView 后,您可以将两种表单添加到 rootView。例如

rootView.getChildren().add(view1);
rootView.getChildren().add(view2);

现在您有两个带有两个 Controller 的表单。如果一个 Controller 需要与另一个 Controller 通信,您可以设置一个引用,例如:

view2Controller.init(view1Controller);

在 view2Controller 中你有:

View1Controller view1Controller;

public void init(View1Controller controller){
this.view1Controller = controller;
}

此 view2Controller 可以像这样调用 view1Controller 中的方法:

view1Controller.xxxxx();

根据应用程序的复杂性,拥有一个“主” Controller (如 MVC 或 MVP 结构)并使用其他 Controller 作为“从” Controller 可能是个好主意。 Controller 可以通过传递引用来相互通信,如上所示。

注意:这是在 James 发表以下评论后编辑的

关于java - 如何使用一个 Controller 来实现两种形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32029364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com