【发布时间】:2016-07-15 07:32:21
【问题描述】:
我正在处理一个 JavaFX 项目,但在使用 TextField 控件时遇到了问题。我想将用户输入到每个 TextField 的字符限制为一个。如果您使用带有侦听器的单个文本字段,我找到了一个解决方案:
public static void addTextLimiter(final TextField tf, final int maxLength) {
tf.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(final ObservableValue<? extends String> ov, final String oldValue, final String newValue) {
if (tf.getText().length() > maxLength) {
String s = tf.getText().substring(0, maxLength);
tf.setText(s);
}
}
});
但问题是我有一个文本字段数组。你们可能知道我如何为 TextFieldArray 重写这个监听器吗?
数组列表实现:
static public TextField[] tfLetters = new TextField[37];
数组的初始化:
private void layoutNodes() {
int letternummer = 0;
for (int i = 1; i < 8; i++) {
for (int j = 0; j < i + 1; j++) {
this.tfLetters[letternummer] = new TextField("Letter " + i);
this.add(tfLetters[letternummer], j, i);
tfLetters[letternummer].setPadding(new Insets(5, 30, 5, 5));
tfLetters[letternummer].setAlignment(Pos.CENTER);
tfLetters[letternummer].setMinSize(10, 10);
letternummer++;
}
}
我使用了给定的解决方案:
Arrays.asList(tfLetters).forEach(tfLetters -> GamePresenter.addTextLimiter(tfLetters,1));
GamePresenter 是编写 Listener 的视图的演示者。 在“GameView”视图中,我实现了文本字段数组。但是现在当我运行给定的解决方案时,我会出现以下 NullPointerException:
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at be.kdg.letterpyramide.view.GameView.GamePresenter.addTextLimiter(GamePresenter.java:36)
at be.kdg.letterpyramide.view.GameView.GameView.lambda$layoutNodes$0(GameView.java:52)
at java.util.Arrays$ArrayList.forEach(Arrays.java:3880)
GameView 行:36
tf.textProperty().addListener(new ChangeListener<String>() {
GameView 行:52
Arrays.asList(tfLetters).forEach(tfLetters -> GamePresenter.addTextLimiter(tfLetters,1));
旁注:我将它设为公开静态,以便我可以在我的 GamePresenter 中使用它。我对 Java 很陌生。
提前致谢!
【问题讨论】:
-
假设你提到的数组是
TextField[] tfArray,addTextLimiter在Main中实现:Arrays.asList(tfArray).forEach(tf -> Main.addTextLimiter(tf, 1)); -
@DVarga 的解决方案在我看来是最简单的,因为 TextField 没有可以覆盖的默认监听器,监听器列表默认为空。
-
@Dvarga 我使用了你的解决方案,但我得到了 NullPointerException,我不知道为什么......
-
用你试过的代码更新问题。
-
@DVarga 更新了! :)