检查在javafx中选择了哪个文本框

2 javafx

我有一个带有多个文本框的javafx应用程序,用户可以在其中输入信息。我还具有一个内置于应用程序中的键盘,当按下该键盘时,会将文本添加到文本框。

我的问题是,由于我有多个文本框,因此我不知道要将按钮文本添加到哪个文本框中。javafx中有没有一种方法可以检查用户是否单击了某个文本框,因此我可以检查选择了哪个文本框并在其中添加文本?

fab*_*ian 5

您可以使用Scene.focusOwner活动场景的属性来获取焦点节点。检查是否为a,TextInputControl然后为单击的按钮调用适当的方法。需要注意的是点击一个按钮可以来回移动焦点,如果focusTraversabletrue该按钮。(默认情况下是这种情况。)

@Override
public void start(Stage primaryStage) {
    GridPane grid = new GridPane();
    final Scene scene = new Scene(grid);

    for (int i = 0; i < 4; i++) {
        grid.add(new TextField(), 0, i);

        final String buttonValue = Character.toString((char) ('a'+i));
        Button button = new Button(buttonValue);
        button.setFocusTraversable(false); // prevent buttons from stealing focus
        button.setOnAction(evt -> {
            Node fo = scene.getFocusOwner();
            if (fo instanceof TextInputControl) {
                ((TextInputControl) fo).replaceSelection(buttonValue);
            }
        });
        grid.add(button, 1, i);
    }


    primaryStage.setScene(scene);
    primaryStage.show();
}
Run Code Online (Sandbox Code Playgroud)