ОС: 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?