JavaFX - Getter 从 TextFields 数组中获取焦点 TextField
JavaFX - Getter for focused TextField out of an array of TextFields
我正在寻找一种在我的程序中预见 getter 的方法。我有一堆动态创建的 TextFields:
fields = new TextField[105];
for (int i = 0; i < fields.length; i++) {
fields[i] = new TextField();
}
在我的程序中它看起来像这样:
本程序的objective是利用图片底部List中的单词,猜猜你要填入TextFields中的单词a.k.a。字母金字塔。因此,我想将聚焦的 TextField 文本与从文本文件读入我的程序的正确答案进行比较。我面临的问题是,我不知道如何从当前关注的数组中预见 getter return 的 TextField。有没有人可以帮助我?
提前致谢!
这里还有一些代码块可以帮助您理解我的问题:
这是我想要 return 聚焦的 TextField
的 getter
public TextField getField() {
return theFocusedTextField;
}
将接收焦点字段并在我的 "model"-class.
中调用方法 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");
}
});
目前,它接收到我自己设置的预定义字段。检查答案的代码有效。感谢任何提供帮助的人,如果我自己找到方法,我一定会 post 在这里。
假设您已经定义:
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 ;
}
});
}
可以使用 focusOwner
property 从 Scene
检索当前聚焦的 Node
。您可以从与 TextField
属于同一场景的任何 Node
中获取 Scene
。
示例:
Scene scene = fields[0].getScene();
Node focusOwner = scene.getFocusOwner();
if (focusOwner instanceof TextField) {
TextField focusedField = (TextField) focusOwner;
...
}
请注意,通过这种方式可以检索不在数组中的 TextField
,因此在这种情况下,您可能需要检查一下,例如通过检查 parent
、styleClass
es,...(假设其中之一允许您确定这是否是数组中的 TextField
s 之一)-
我正在寻找一种在我的程序中预见 getter 的方法。我有一堆动态创建的 TextFields:
fields = new TextField[105];
for (int i = 0; i < fields.length; i++) {
fields[i] = new TextField();
}
在我的程序中它看起来像这样:
本程序的objective是利用图片底部List中的单词,猜猜你要填入TextFields中的单词a.k.a。字母金字塔。因此,我想将聚焦的 TextField 文本与从文本文件读入我的程序的正确答案进行比较。我面临的问题是,我不知道如何从当前关注的数组中预见 getter return 的 TextField。有没有人可以帮助我?
提前致谢!
这里还有一些代码块可以帮助您理解我的问题:
这是我想要 return 聚焦的 TextField
的 getterpublic TextField getField() {
return theFocusedTextField;
}
将接收焦点字段并在我的 "model"-class.
中调用方法 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");
}
});
目前,它接收到我自己设置的预定义字段。检查答案的代码有效。感谢任何提供帮助的人,如果我自己找到方法,我一定会 post 在这里。
假设您已经定义:
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 ;
}
});
}
可以使用 focusOwner
property 从 Scene
检索当前聚焦的 Node
。您可以从与 TextField
属于同一场景的任何 Node
中获取 Scene
。
示例:
Scene scene = fields[0].getScene();
Node focusOwner = scene.getFocusOwner();
if (focusOwner instanceof TextField) {
TextField focusedField = (TextField) focusOwner;
...
}
请注意,通过这种方式可以检索不在数组中的 TextField
,因此在这种情况下,您可能需要检查一下,例如通过检查 parent
、styleClass
es,...(假设其中之一允许您确定这是否是数组中的 TextField
s 之一)-