JavaFX如何通过button.setOnAction改变场景的大小

标签 java javafx

我是 Java 和 JavaFx 新手,我想问一个问题。简单地说,我有一个阶段,有一个按钮和一个具有特定大小的场景,我用这样的编码声明了场景的大小:

public class ClientBaseDialog
extends Stage
{

GridPane grid;
ScrollPane scroll;
Boolean counter = false;

public ClientBaseDialog( String Label1, String Label2 )
{

    setResizable( false );
    final Label label = new Label( Label1 );
    final Label label2 = new Label( Label2 );

    label2.setWrapText( true );


    BorderPane borderPane = new BorderPane();

    final VBox myView = new VBox();
    label.setWrapText( true );
    myView.getChildren().addAll( label2 );

    Button closeButton = new Button( "Close" );
    closeButton.setOnAction( new EventHandler<ActionEvent>()
    {
        @Override
        public void handle( ActionEvent t )
        {
            ClientBaseDialog.this.close();

        }
    } );

    Button detailButton = new Button( "Detail" );
    detailButton.setOnAction( new EventHandler<ActionEvent>()
    {
        @Override
        public void handle( ActionEvent t )
        {
            if ( counter == false )
            {
                grid.add( scroll, 1, 5 );
                counter = true;

                   Scene scene = new Scene( grid, 600, 500 );
                   setScene( scene );
            }

            else
            {

                grid.getChildren().remove( scroll );
                counter = false;
            }

        }
    } );

    label.setWrapText( true );
    label.setPrefSize( 500, 250 );
    label2.setWrapText( true );

    HBox hbox = new HBox();
    HBox hbox2 = new HBox();

    hbox.setAlignment( Pos.CENTER );
    hbox2.setAlignment( Pos.CENTER );

    hbox.getChildren().add( closeButton );
    hbox2.getChildren().add( detailButton );
    hbox.setSpacing( 10 );

    scroll = new ScrollPane();
    scroll.setContent( myView );
    scroll.setPrefHeight(300);
    scroll.setHbarPolicy( ScrollPane.ScrollBarPolicy.NEVER );
    borderPane.setBottom( scroll );
    scroll.setFitToWidth( true );

    grid = new GridPane();
    ColumnConstraints col1 = new ColumnConstraints();
    col1.setPercentWidth( 5 );
    ColumnConstraints col2 = new ColumnConstraints();
    col2.setPercentWidth( 90 );
    ColumnConstraints col3 = new ColumnConstraints();
    col3.setPercentWidth( 5 );
    grid.getColumnConstraints().addAll( col1, col2, col3 );

    RowConstraints row1 = new RowConstraints();
    row1.setPercentHeight( 10 );
    RowConstraints row2 = new RowConstraints();
    row2.setPercentHeight( 2);
    RowConstraints row3 = new RowConstraints();
    row3.setPercentHeight( 2 );
    grid.getRowConstraints().addAll( row1, row2, row3 );

    grid.setHgap( 0 );
    grid.setVgap( 10 );
    grid.setPadding( new Insets( 0, 10, 0, 10 ) );

    grid.add( label, 1, 0 );
    grid.add( hbox, 1, 3 );
    grid.add( hbox2, 1, 4 );
    grid.setAlignment( Pos.CENTER );
    Scene scene = new Scene( grid, 600, 250 );
    setScene( scene );




    }

}

所以基本上我试图通过单击按钮来增加当前舞台/场景的大小,但不知何故出了问题,我收到运行时错误,它说“java.lang.IllegalArgumentException:Grid hgap = 0.0, vgap=10.0,alignment=CENTER已设置为另一个场景的根”,抱歉我没有分享完整的编码,在这里分享它很长,有人介意建议吗?抱歉我的英语不好

编辑:为了避免任何混淆,我将在类里面分享完整的编码,对于给您带来的不便表示歉意:(

最佳答案

该异常清楚地表明一个场景的根节点正被尝试设置为另一个场景的根节点。

但是改变场景大小的方法是错误的。
因此,不要创建新场景,而是更改舞台的大小。
换句话说,而不是

Scene scene = new Scene(grid, 600, 500);
setScene(scene);

就这么做

setWidth(600);
setHeight(500);

关于JavaFX如何通过button.setOnAction改变场景的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22475922/

相关文章:

javafx - 在 JavaFX 中如何理解和使用 `<fx:root>` ?

java - Android 和 Eclipse - 通过 SVN 导出本地 jar

java - 如果选中某些按钮,则加载不同的场景

java - 如何同步 JavaFx 和 Swing 外观

: es2, sw 的 JavaFX 图形设备初始化失败

JavaFX : Draggable node (Label ) horizontally only not vertically

java - 当使用 "bundle"打包时,maven-bundle-plugin 目标被执行两次

java - 使用 Spring-boot 在 Kafka 主题上发布重复消息

java - android:TimePickerDialog 阻止用户选择过去的时间,并可以选择具有新日期的 future 时间

java - MongoDB 的招聘管理门户数据存储/架构设计