web-dev-qa-db-ja.com

JavaFX:なぜstage.setResizable(false)が追加のマージンを引き起こすのですか?

この小さなJavaFXテストアプリケーション

_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();
    }
}
_

不要なパディングのあるウィンドウを生成します。

stage with margin

呼び出しprimaryStage.setResizable(false)を削除すると、効果も削除されます。

stage without margin

何が問題になっていますか?

20
Jens Piegsa

すでにコメントしたように、!/ resizableのこの異なる動作はバグのようなにおいがします(誰かが問題を提出することを検討するかもしれません;-)

手動でサイジングするよりも短い方法は、ステージをシーンに明示的に合わせることです。

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

これはjdk8では機能しますが、jdk7では機能しないことに注意してください。

便宜上、バグの更新:jewelseaによって提出された元のレポートは、(新しい座標で)の複製として閉じられました https://bugs.openjdk.Java.net/browse/JDK-8089008 -まだオープン、勝利のみであるとコメント。

43
kleopatra

これは説明ではありませんが、問題を解決します。

@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();
}

キーは、適切なタイミングでStageの幅と高さを設定することです。

2
Jens Piegsa

必要なサイズのフレーム-Dimension name = new Dimension(height,width)-の寸法を作成してから、その寸法サイズを長方形のBorderPaneおよびSceneに設定します。すべてを同じサイズにしたいですか?

0