JavaFX TextField将焦点上的填充更改为0

Kri*_*sko 11 java javafx padding textfield

我正在尝试将填充设置为JavaFX中的文本字段(使用Java 8_192)。我有一个带有3个TextField的简单VBox。如果我手动在第一个TextField上设置填充,则其他TextField在聚焦时会以某种方式将其填充重置为0。

第一个TextField具有手动填充:

屏幕截图1

当聚焦第二个(或第三个)TextField时,它们的填充值为0:

在此处输入图片说明

如果我专注于其他内容,则其填充将重置为javafx(4、7、4、7)设置的常规填充。奇怪的是,如果我将的填充设置tf2tf1,则不会有任何问题。另外,如果我手动设置每个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);
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么仅在将填充设置为我添加到vbox的第一个TextField时,才在聚焦后重置填充?

fug*_*i61 0

如果我理解正确,您只想在文本字段像标题中那样聚焦时设置文本字段的填充,那么我会使用这个:

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*");
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助你!很抱歉,如果这不能回答您的问题,但这就是我的理解。