Short:
Проблема возникает, только когда getAlignment()
установлено влево (BASELINE_LEFT
, BOTTOM_LEFT
, CENTER_LEFT
или TOP_LEFT
), поэтому просто используйте textField.setAlignment(Pos.CENTER);
.
Длинный ответ, так как это все еще странное поведение:
Текст расположен неправильно, весь текст перемещен влево из видимой области. Кажется, что причина этого поведения в том, что ширина текстового поля слишком мала.
Это небольшой пример, когда текст «test» набирается, а затем перемещает курсор влево.
Ну, я думаю, это проблема, как работает TextFieldSkin.computePrefWidth
, так как он не вычисляет размер курсора.
Вы можете создать свой собственный TextFieldSkin, который computePrefWidth возвращает большее значение: (В этом примере кода используется com.sun.javafx.scene.control.skin.TextFieldSkin.TextFieldSkin
для Java-8)
textField.setSkin(new TextFieldSkin(textField){
@Override
protected double computePrefWidth(double height, double topInset, double rightInset, double bottomInset, double leftInset) {
return 1 + super.computePrefWidth(height, topInset, rightInset, bottomInset, leftInset);
}
});
Вы также можете один к prefColumnCount
textField.prefColumnCountProperty().bind(textField.textProperty().length().add(1));
См. Также: Что такое свойство prefColumnCount для TextField?