我是新手并且正在尝试学习JavaFX和FXML。我的大部分应用程序逻辑都在FXMLController类中,除了NetBeans IDE生成的基本代码(如下面的
)之外,基类几乎是空的。@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
我有一个ID input1
的元素,其类型为TextField
。我怎样才能访问这个(或任何
其他)由其ID控制? (请记住,我在控制器类而不是主类)。
我在下面发现了这个问题,这正是我正在寻找的,但这种情况不同,因为它们位于定义scene
的主类中。如何从控制器类访问scene
并使用下面问题中的代码。
答案 0 :(得分:1)
这是我第一次回答有关Stack Overflow的问题,所以请放轻松。
我也是JavaFX的新手,我也遇到了这个问题。 这就是找到的。 FXMLDocument.fxml中的TextField必须分配一个fx:id,如:
<TextField fx:id="input1" layoutX="0.5" layoutX="0.5" />
如果您使用的是JavaFX SceneBuilder,那么您可以在右侧的“Code:TextField”下找到fx:id。
然后在您的控制器类中,您可以使用它来访问它。
@FXML public TextField input1;
您可以使用ArrayList遍历所有TextField。 这是一个例子。
@FXML public TextField input1;
@FXML public TextField input2;
@FXML public TextField input3;
@FXML public TextField input4;
@FXML public TextField input5;
@FXML public TextField input6;
@FXML public TextField input7;
@FXML public Button button;
List<TextField> inputs = new ArrayList<TextField>();
public void displayText(ActionEvent event) {
inputs.add(input1);
inputs.add(input2);
inputs.add(input3);
inputs.add(input4);
inputs.add(input5);
inputs.add(input6);
inputs.add(input7);
for (int x = 0; x < 7; x++) {
System.out.println(inputs.get(x).getText());
}
}
可能有一种更简单的方法,但这种方式对我有用。