Yes, it works. Thank you Kevin. The used JDK is: java version "10.0.2" 2018-07-17 Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13) Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
Here is the code: Scene scene = new Scene(gridPane); scene.snapshot(null); double width = gridPane.getWidth(); double height = gridPane.getHeight(); System.out.println("width=" + width + ", height=" + height); if(width > 0 && height > 0) { primaryStage.setMinWidth(width + 1); primaryStage.setMinHeight(height + 1); } primaryStage.setScene(scene); primaryStage.setWidth(640); primaryStage.setHeight(480); primaryStage.show(); On Thu, Aug 23, 2018 at 8:47 PM Kevin Rushforth <kevin.rushfo...@oracle.com> wrote: > In general, this is fragile and should not be relied upon (not to > mention it is internal API that is not available in the latest release > and is subject to change in 8u). > > One possibility using public API is to use Scene::snapshot, but even > that isn't guaranteed to work in all cases if the Scene has never been > shown. > > -- Kevin > > > On 8/23/2018 10:34 AM, Miroslav Nachev wrote: > > The GridPane is not empty: > > gridPane.add(sceneTitleHBox, 0, 0, 2, 1); > > Label usernameLabel = new Label("Username:"); > > gridPane.add(usernameLabel, 0, 1); > > > > TextField usernameText = new TextField(); > > gridPane.add(usernameText, 1, 1); > > > > Label passwordLabel = new Label("Password:"); > > gridPane.add(passwordLabel, 0, 2); > > > > PasswordField passwordField = new PasswordField(); > > gridPane.add(passwordField, 1, 2); > > gridPane.add(buttonLoginHBox, 0, 4, 2, 1); > > gridPane.add(buttonLoginActionMessage, 1, 6); > > > > > > > > On Thu, Aug 23, 2018 at 8:22 PM David Grieve <david.gri...@oracle.com> > > wrote: > > > >> If your GridPane is empty, it won't have any height or width unless you > >> set min. > >> > >> > >> On 8/23/18 1:16 PM, Miroslav Nachev wrote: > >>> For Button this works. For GridPane doesn't works: > >>> gridPane.applyCss(); > >>> gridPane.layout(); > >>> double width = gridPane.getWidth(); > >>> double height = gridPane.getHeight(); > >>> System.out.println("width=" + width + ", height=" + height); > >>> --- exec-maven-plugin:1.5.0:exec (default-cli) --- > >>> width=0.0, height=0.0 > >>> > >>> > >>> On Thu, Aug 23, 2018 at 6:56 PM Shakir Gusaroff < > >> shakir.gusar...@gmail.com> > >>> wrote: > >>> > >>>> . In javafx 8 you can find the width and height of the node before the > >>>> Stage has been shown. Use applyCss() and layout(). > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> @Override > >>>> > >>>> public void start(Stage stage) throws Exception { > >>>> > >>>> > >>>> > >>>> Group root = new Group(); > >>>> > >>>> Scene scene = new Scene(root); > >>>> > >>>> > >>>> > >>>> Button button = new Button("Hello World"); > >>>> > >>>> root.getChildren().add(button); > >>>> > >>>> > >>>> > >>>> root.applyCss(); > >>>> > >>>> root.layout(); > >>>> > >>>> > >>>> > >>>> double width = button.getWidth(); > >>>> > >>>> double height = button.getHeight(); > >>>> > >>>> > >>>> > >>>> System.out.println(width + ", " + height); > >>>> > >>>> > >>>> > >>>> stage.setScene(scene); > >>>> > >>>> stage.show(); > >>>> > >>>> } > >>>> > >>>> > >>>> On Thu, Aug 23, 2018 at 10:35 AM Miroslav Nachev < > >>>> mnachev.nscenter...@gmail.com> wrote: > >>>> > >>>>> Hi, > >>>>> > >>>>> Is there any standard way to calculate the preferred size for Scene, > >>>>> Node/Pane and Stage/Window? > >>>>> I want once a form/pane is visualized, it cannot be minimized to a > >> certain > >>>>> size. Since I did not find such a built-in opportunity, at the moment > >> I am > >>>>> doing the following: > >>>>> > >>>>> Scene scene = new Scene(gridPane); > >>>>> primaryStage.setScene(scene); > >>>>> primaryStage.sizeToScene(); > >>>>> > >>>>> primaryStage.show(); > >>>>> primaryStage.setMinWidth(primaryStage.getWidth() + 1); > >>>>> primaryStage.setMinHeight(primaryStage.getHeight() + 1); > >>>>> primaryStage.setWidth(640); > >>>>> primaryStage.setHeight(480); > >>>>> primaryStage.show(); > >>>>> > >>>>> The first call to primaryStage.show() (in orange) I do to calculate > the > >>>>> minimum panel size (Scene/GridPane), then set that size as minimum on > >>>>> primaryStage, and finally set the size I want and visualize the panel > >>>>> again. > >>>>> > >>>>> The unpleasant side effect is, that the panel is no longer at the > >> center > >>>>> of > >>>>> the screen. > >>>>> > >>>>> Any ideas? > >>>>> > >>>>> > >>>>> Regards, > >>>>> Miro. > >>>>> > >> > >