【问题标题】:JavaFX - Getter for focused TextField out of an array of TextFieldsJavaFX - 从一组 TextFields 中获取焦点 TextField 的 Getter
【发布时间】:2016-08-10 16:01:04
【问题描述】:

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

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

在我的程序中是这样的:

GameView for the TextFields

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

提前致谢!

这里还有一些代码块可以帮助您理解我的问题:

这是我要返回焦点 TextField 的 getter

public TextField getField() {
    return theFocusedTextField;
}

将接收焦点字段并在我的“模型”类中调用方法 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");
        }
    });

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

【问题讨论】:

    标签: java arrays javafx textfield getter


    【解决方案1】:

    假设您已经定义:

    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 ;
            }
        });
    }
    

    【讨论】:

      【解决方案2】:

      可以使用focusOwner propertyScene 中检索当前关注的Node。您可以从任何与TextFields 属于同一场景的Node 获取Scene

      例子:

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

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

      【讨论】:

        猜你喜欢
        • 2015-05-17
        • 2014-11-15
        • 2020-05-03
        • 2015-11-20
        • 1970-01-01
        • 1970-01-01
        • 2018-01-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多