JavaFX: Why does stage.setResizable(false) cause additional margins?

前端 未结 3 1724
情深已故
情深已故 2020-12-05 00:53

This small JavaFX test application

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.sce         


        
相关标签:
3条回答
  • 2020-12-05 01:24

    Although this is not explanation, it solves the problem:

    @Override
    public void start(final Stage primaryStage) throws Exception {
        final Dimension d = new Dimension(210, 110);
        final Rectangle rectangle = new Rectangle(d.width, d.height, Color.POWDERBLUE);
        final BorderPane pane = new BorderPane(rectangle);
        pane.maxWidth(d.height);
        pane.maxWidth(d.width);
        final Scene scene = new Scene(pane, d.width, d.height);
        primaryStage.setScene(scene);
        primaryStage.setResizable(false);
        primaryStage.setWidth(d.width);
        primaryStage.setHeight(d.height);
        primaryStage.show();
    }
    

    Key is setting width and height of the Stage at the right time.

    0 讨论(0)
  • 2020-12-05 01:32

    As already commented, this different behaviour of !/resizable smells like a bug (somebody might consider filing an issue ;-)

    A shorter (than sizing manually) way around is to explicitly fit the stage to the scene:

    primaryStage.setScene(scene);
    primaryStage.setResizable(false);
    primaryStage.sizeToScene();
    

    Just noticed that this works for jdk8, but not jdk7.

    For convenience, a bug update: the original report filed by jewelsea was closed as a duplicate of (in new coordinates) https://bugs.openjdk.java.net/browse/JDK-8089008 - still open, commented to be win-only.

    0 讨论(0)
  • 2020-12-05 01:38

    Try creating a dimension for the size you want the frame- Dimension name = new Dimension(height,width)- then set that Dimension size to the rectangle BorderPane and Scene. You do want everything to be the same size correct?

    0 讨论(0)
提交回复
热议问题