从控制器类访问场景

时间:2013-12-21 04:06:38

标签: javafx-2 fxml

我是新手并且正在尝试学习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并使用下面问题中的代码。

How to find an element with an ID in JavaFX?

1 个答案:

答案 0 :(得分:1)

这是我第一次回答有关Stack Overflow的问题,所以请放轻松。

我也是JavaFX的新手,我也遇到了这个问题。 这就是找到的。 FXMLDocument.fxml中的T​​extField必须分配一个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());
    }
}

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