我正在尝试将填充设置为JavaFX中的文本字段(使用Java 8_192)。 我有一个带有3个TextField的简单VBox。如果我在第一个TextField上手动设置填充,则其他TextField在聚焦时会以某种方式将其填充重置为0。
第一个TextField具有手动填充:
当聚焦第二个(或第三个)TextField时,它们的填充为0:
如果我关注不同的内容,则其填充将重置为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);
}
}
为什么仅在将填充设置为我添加到vbox的第一个TextField时,才在焦点之后重置填充?
答案 0 :(得分: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*");
}
}
});
希望对您有所帮助! 抱歉,这不能回答您的问题,但这是我的理解方式。