Javafx 2 从控制器类访问场景

Javafx 2 从控制器类访问场景,javafx-2,fxml,Javafx 2,Fxml,我对JavaFX和FXML还不熟悉,正在努力学习。我的大多数应用程序逻辑都在FXMLController类中,基类几乎是空的,除了netbeanside生成的基本代码,如下所示 @Override public void start(Stage stage) throws Exception { Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml")); Scene scene = ne

我对JavaFX和FXML还不熟悉,正在努力学习。我的大多数应用程序逻辑都在FXMLController类中,基类几乎是空的,除了netbeanside生成的基本代码,如下所示

@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进行控制?(请记住,我是controller类而不是main类)

我在下面找到了这个问题,这正是我要找的,但情况不同,因为它们位于定义了
scene
的主类中。如何从controller类访问
场景
,并使用下面问题中的代码


这是我第一次回答有关堆栈溢出的问题,所以请对我放松

我对JavaFX也是新手,对此我也有问题。 这是如果发现的话。 必须为FXMLDocument.fxml中的文本字段分配一个fx:id,如中所示:

<TextField fx:id="input1" layoutX="0.5" layoutX="0.5" />

您可以使用ArrayList在所有文本字段中循环。 这里有一个例子

@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());
    }
}
@FXML公共文本字段input1;
@FXML公共文本字段输入2;
@FXML公共文本字段输入3;
@FXML公共文本字段输入4;
@FXML公共文本字段输入5;
@FXML公共文本字段输入6;
@FXML公共文本字段输入7;
@FXML公共按钮;
列表输入=新的ArrayList();
公共无效显示文本(ActionEvent事件){
输入。添加(输入1);
输入。添加(输入2);
输入。添加(输入3);
输入。添加(输入4);
输入。添加(输入5);
输入。添加(输入6);
输入。添加(输入7);
对于(int x=0;x<7;x++){
System.out.println(inputs.get(x.getText());
}
}

可能有一种更简单的方法,但这种方法对我有效。

您可以对场景图中的任何节点调用lookup(…)或lookupAll(…),这些节点是您要查找的节点的祖先。因此,只需使用注入(fx:id和@FXML annotation)获取对包含所有文本字段(例如根元素)的引用,并对其调用lookup(…)。查找有点脆弱;它们只保证在场景渲染后工作(因此在初始化(…)中不工作)方法。您最好将文本字段放在列表或数组中并进行迭代。ArrayList可能是您的最佳选择。我将更新我的答案以显示一个示例。感谢您的帮助。我现在将使用list,对于我正在处理的一个简单项目来说似乎已经足够好了。
@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());
    }
}