Я пытаюсь отследить ввод в TextField и разрешить пользователю вводить только 1 символ в TextField, вот мой код:
package sample;
import javafx.application.Application;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
TextField textField = new TextField(); //creating new textfield
Pane window = new Pane();
Parent root = window;
window.getChildren().addAll(textField); //adding textfield to the window
primaryStage.setScene(new Scene(root, 200, 50));
primaryStage.show();
textField.textProperty().addListener(event ->
{
try {
if (textField.getLength() > 1) { //check if the length of the textfield text exceeds 1
System.out.println("NOT Accepted");
textField.setText(String.valueOf(textField.getText().charAt(0))); //set textfield text to first char only
} else {
System.out.println("Accepted");
}
} catch (IndexOutOfBoundsException Bound) {}
}
);
}
public static void main(String[] args) {
launch(args);
}
}
Когда я нажимаю любой символ в первый раз, все работает хорошо, но когда я нажимаю второй раз, прослушиватель событий повторяется 3 раза. Вот пример:
нажата клавиша "a", вывод на консоль:
Accepted //<---Correct
Нажата клавиша «a» (или любая другая клавиша) второй раз, вывод на консоль:
NOT Accepted //<---Correct
Accepted //<---Not correct
Accepted //<---Not correct
Как показано выше, слушатель повторяется 3 раза.
Но я ожидаю, что консоль должна показывать только «НЕ принято» и не должна повторяться в 2 раза больше.