JavaFX TextField меняет отступы на 0 в фокусе - PullRequest
8 голосов
/ 11 июля 2019

Я пытаюсь установить отступ для текстового поля в JavaFX (используя Java 8_192).У меня есть простой VBox с 3 TextFields в нем.Если я вручную устанавливаю заполнение для первого TextField, другие TextFields каким-то образом сбрасывают свои отступы до 0, когда я фокусирую их.

Первый TextField имеет заполнение вручную:

screenshot-1

При фокусировке второго (или третьего) TextField они получают отступ 0:

enter image description here

Если я сфокусируюсь на чем-то другом, их отступы будут сброшены к обычным отступам, установленным javafx (4, 7, 4, 7).Странно то, что если я установлю отступ tf2 вместо tf1, проблем не будет.Кроме того, если я вручную установлю отступы каждого TextField, они не будут сброшены на 0. Но это, очевидно, не может быть ответом ...

Мой код:

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        VBox vbox = new VBox();
        vbox.setSpacing(10);
        vbox.setPadding(new Insets(10, 10, 10, 10));

        TextField tf1 = new TextField();
        TextField tf2 = new TextField();
        TextField tf3 = new TextField();

        vbox.getChildren().addAll(tf1);
        vbox.getChildren().addAll(tf2);
        vbox.getChildren().addAll(tf3);

        tf1.setPadding(new Insets(7, 7, 7, 7));
        // Setting the padding of tf2 instead of tf1 works

        Scene scene = new Scene(vbox, 250, 150);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Почему заполнение сбрасывается после фокуса, только при установке отступа на первый TextField, который я добавляю в vbox?

1 Ответ

0 голосов
/ 13 июля 2019

Если я правильно понимаю, вы просто хотите установить отступ текстового поля, когда оно сфокусировано, как в заголовке, тогда я бы использовал это:

yourTextField.focusedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue, Boolean newPropertyValue) {
    if (newPropertyValue) {
        System.out.println("Textfield on focus");
        yourTextField.setStyle("-fx-padding: *yourNewPadding*");
    } else {
        System.out.println("Textfield out focus");
        yourTextField.setStyle("-fx-padding: *yourOldPadding*");
    }
}
});

Надеюсь, это поможет вам!Извините, если это не отвечает на ваш вопрос, но я так понял.

...