JavaFX - 从TextFields数组中获取焦点TextField的Getter

时间:2016-08-10 16:01:04

标签: java arrays javafx textfield getter

我正在寻找一种方法来预测我的程序中的一个吸气剂。我有一堆动态创建的TextField:

fields = new TextField[105];
for (int i = 0; i < fields.length; i++) {
    fields[i] = new TextField();
}

在我的程序中它看起来像这样:

GameView for the TextFields

这个程序的目的是使用图片底部列表中的单词,并猜测你必须填写的文字到TextFields a.k.a. LetterPyramid中。因此,我想将TextField的文本与从文本文件中读入我的程序的正确答案进行比较。我面临的问题是,我不知道如何预测一个getter,它将TextField从当前聚焦的数组中返回。有没有人可以帮我这个?

提前致谢!

以下是一些代码块,可帮助您了解我的问题:

这是我想要返回聚焦的TextField

的getter
public TextField getField() {
    return theFocusedTextField;
}

将接收焦点字段并在我的“model”类中调用方法checkInput()的处理程序。

view.getField().textProperty().addListener((observable, oldValue, newValue) -> {
        if (newValue.length() == 1) {
            Log.debug("Old value: " + oldValue + "\nNew value: " + newValue);
            boolean isCorrect = model.checkInput(newValue);
            if (isCorrect) {
                view.getField().setStyle("-fx-background-color: darkgreen; -fx-text-fill: white");
            } else {
                view.getField().setStyle("-fx-background-color: darkred; -fx-text-fill: white");
            }
        } else if (newValue.equals("")) {
            view.getField().setStyle("-fx-background-color: darkred; -fx-text-fill: white");
        }
    });

此刻,它会收到我自己设定的预定义字段。检查答案的代码有效。感谢任何有帮助的人,如果我自己找到方法,我一定会在这里发布。

2 个答案:

答案 0 :(得分:0)

假设您已定义:

private TextField theFocusedTextField ;

然后您只需要:

fields = new TextField[105];
for (int i = 0; i < fields.length; i++) {
    TextField textField = new TextField();
    fields[i] = textField ;
    textField.focusedProperty().addListener((obs, wasFocused, isNowFocused) -> {
        if (isNowFocused) {
            theFocusedTextField = textField ;
        } else {
            theFocusedTextField = null ;
        }
    });
}

答案 1 :(得分:0)

可以使用focusOwner propertyNode检索当前关注的Scene。您可以从与Scene相同的场景中的任何Node获取TextField

示例:

Scene scene = fields[0].getScene();
Node focusOwner = scene.getFocusOwner();
if (focusOwner instanceof TextField) {
     TextField focusedField = (TextField) focusOwner;
     ...
}

请注意,可以检索不在数组中的TextField这样的方式,因此在这种情况下,您可能需要检查此项,例如通过检查parentstyleClass es,...(假设其中一个允许您确定这是否是数组中的TextField之一) -