私はJavaFXプロジェクトで作業していますが、TextFieldコントロールを使用する際に問題があります。ユーザーが各TextFieldに入力する文字を1つに制限したい。リスナーで1つのテキストフィールドを使用すると解決策が見つかりました:JavaFX TextField Arrayテキストの長さの最大長
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);
}
}
});
しかし、問題は私がTextFieldの配列を持っているということです。 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++;
}
}
Iは、与えられた溶液を使用した:
Arrays.asList(tfLetters).forEach(tfLetters -> GamePresenter.addTextLimiter(tfLetters,1));
GamePresenterどこリスナービューのプレゼンタであります書かれた。 "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));
は追記:私はそれのpublic static作ら私はそれを私のGamePresenterで使うことができます。私はJavaにとって非常に新しいです。
ありがとうございます!
1)); ' – DVarga
@DVargaの解決策は、TextFieldにはデフォルトのリスナーがないため、リスナーのリストはデフォルトでは空ですので、私の意見では最も簡単です。 – Westranger
@Dvarga私はあなたのソリューションを使用しましたが、NullPointerExceptionが発生しました。理由はありません。 – CaptainAaargh