JavaFX 프로젝트에서 작업 중이고 TextField 컨트롤을 사용하는 데 문제가 있습니다. 사용자가 각 TextField에 입력 할 문자를 하나로 제한하려고합니다. 당신이 리스너와 함께 하나의 텍스트 필드를 사용하는 경우 나는 해결책을 발견 :JavaFX 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);
}
}
});
을하지만 문제는 내가 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++;
}
}
내가 용액으로 사용했을
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));
(!) 참고 : 나는 만든 공공 정적을 그래서 나는 그것을 GamePresenter에서 사용할 수 있습니다. 나는 Java에 매우 익숙하다.
미리 감사드립니다.
는 언급 된 배열의 TextField '[]'과 tfArray' addTextLimiter'가 Main''로 구현되는 것을 가정 1)); ' – DVarga
@DVarga의 솔루션은 TextField에 덮어 쓸 수있는 기본 리스너가 없기 때문에 가장 간단합니다. 리스너 목록은 기본적으로 비어 있습니다. – Westranger
@Dvarga 귀하의 솔루션을 사용했지만 NullPointerException이 발생하고 이유가 없습니다 ... – CaptainAaargh