问题
This small JavaFX test application
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class ApplicationWithNonResizableStage extends Application {
public static void main(final String[] args) {
launch(args);
}
@Override
public void start(final Stage primaryStage) throws Exception {
final Rectangle rectangle = new Rectangle(200, 100, Color.POWDERBLUE);
final BorderPane pane = new BorderPane(rectangle);
final Scene scene = new Scene(pane);
primaryStage.setScene(scene);
primaryStage.setResizable(false);
primaryStage.show();
}
}
produce a window with unwanted padding:

Removing the call primaryStage.setResizable(false)
also removes the effect:

What is going wrong?
回答1:
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.
回答2:
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.
回答3:
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?
来源:https://stackoverflow.com/questions/20732100/javafx-why-does-stage-setresizablefalse-cause-additional-margins