JavaFX primaryStage与TextField的绑定

时间:2019-12-11 09:13:00

标签: javafx

在JavaFx中,我目前正在尝试更改 primaryStage通过绑定。

     primaryStage.setScene(scene);
     primaryStage.setHeight(400.0);
     primaryStage.widthProperty().bindBidirectional(textField.textProperty());

这只是一个作业问题,没有意义。 不幸的是primaryStagereadOnlyDoubleProperty。我可以更改此设置以获得写权限吗?

我知道,可以通过EventHandler来更改窗口大小,但是我想通过带有绑定的TextField来动态更改窗口大小。 因此,任何新输入的数字都会扩大窗口。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这绝对是可能的,我希望有一种更好的方法,并且永远不要使用此代码,但这正是我设法做到的

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
        TextField textField = new TextField();

        //Allows for only numeric input
        textField.setTextFormatter(new TextFormatter<>(change -> {
            if (change.getText().matches("[0-9]*"))
                return change;
            else
                return null;
        }));

        primaryStage.setScene(new Scene(textField));
        primaryStage.setHeight(200.0);

        //Allows Program to start without error
        primaryStage.setMaxWidth(200);

        //Binds min and max to ensure stage width change due to only 1 possible size
        primaryStage.minWidthProperty().bind(primaryStage.maxWidthProperty());

        //Bind textfield to width
        textField.textProperty().bindBidirectional(primaryStage.maxWidthProperty(), new NumberStringConverter());

        primaryStage.show();
    }
}