Stage.setScene (), кажется, игнорирует настройки maxHeight / Width - PullRequest
1 голос
/ 01 октября 2019

ОС: Linux Mint 18.3, Java 11 .

Вот SSCCE:

import javafx.application.*;
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.layout.*;
import javafx.scene.control.*;

public class SceneSwitcher extends Application {

    public static void main(String[] args) {
        launch( args);
    }
    Button btnSwitchToScene2;
    Scene scene1;
    Button btnSwitchToScene1;
    Scene scene2;
    Stage stage;
    @Override 
    public void start(Stage primaryStage)
    {
        stage = primaryStage;


        stage.setMinHeight( 500 );
        stage.setMaxHeight( 500 );
        // stage.setHeight( 500 );

        stage.setMinWidth( 1000 );
        stage.setMaxWidth( 1000 );
        // stage.setWidth( 1000 );

        stage.setResizable( false );

        btnSwitchToScene2 = new Button();
        btnSwitchToScene2.setText("Switch!");
        btnSwitchToScene2.setOnAction(  e ->
            btnSwitchToScene2_Click()  );
        VBox pane1 = new VBox(10);
        pane1.getChildren().addAll( btnSwitchToScene2);
        scene1 = new Scene(pane1, 250, 150);
        btnSwitchToScene2 = new Button();
        btnSwitchToScene2.setText("Switch!");
        btnSwitchToScene2.setOnAction( e ->
            btnSwitchToScene1_Click() );
        HBox pane2 = new HBox(10);
        pane2.getChildren().addAll( btnSwitchToScene2);
        scene2 = new Scene(pane2, 300, 75);
        // Set the stage with scene 1 and show the stage
        primaryStage.setScene(scene1);
        primaryStage.setTitle("Scene Switcher");
        primaryStage.show();

    }
    private void btnSwitchToScene2_Click()
    {
        stage.setScene(scene2);
    }
    private void btnSwitchToScene1_Click()
    {
        stage.setScene(scene1);
    }
}

Первый показ имеет правильные размеры. Однако при изменении значения Scene s, хотя значение resizable == false остается, размеры окна (Stage) настраиваются в соответствии с Scene s.

Это предполагаемое поведение? Если это так, что я должен сделать, чтобы сохранить фиксированный размер Stage?

Что-то еще более необъяснимое произойдет, если вы раскомментируете строку stage.setHeight( 500 );: на моей машине, когда вы нажимаете кнопку «Переключить», окно остается прежнимразмер, но становится полностью черным.

В Swing такие настройки были довольно хитрыми, и практическим правилом было использование setPreferredHeight/Width/Size и т. д., и позволяла инфраструктуре заботиться о вещах. Как это работает в JavaFX?

...