我似乎无法在javafx中更改场景

我似乎无法在javafx中更改场景,java,javafx-8,Java,Javafx 8,所以我试图在javafx中的两个场景之间进行简单的切换,但我遇到了这个重复出现的问题,似乎无法解决。以下代码对此进行了演示: import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.Group; import javafx.scene.paint.Color; public class TestApplication exte

所以我试图在javafx中的两个场景之间进行简单的切换,但我遇到了这个重复出现的问题,似乎无法解决。以下代码对此进行了演示:

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Group;
import javafx.scene.paint.Color;

public class TestApplication extends Application
{
   private Stage stage;
   private Scene scene, scene2;
   public void start(Stage s)
   {
      scene=new Scene(new Group());
      scene2=new Scene(new Group());

      scene.setFill(Color.GREEN);
      scene2.setFill(Color.ORANGE);

      scene.setOnMouseClicked(e-> changeScene(scene2));
      scene2.setOnMouseClicked(e-> changeScene(scene)); 

      stage=s;
      s.setScene(scene);
      s.show();
   }
   public void changeScene(Scene nex)
   {
      stage.setScene(nex);
      System.out.println("here");
   }

   public static void main(String[] args)
   {
      launch(args);
   }
}
我做错什么了吗?我如何解决这个问题?

出了什么问题

您没有在场景中放置任何内容(只是一个空组)。默认情况下,场景的大小(通常)将调整为其所包含内容的首选大小。由于场景没有任何大小的内容,因此场景实际上不应该有任何大小。我认为第一个场景甚至出现的事实是JavaFX系统的一个小怪癖,当它无法为场景计算出任何首选大小时,它似乎为初始场景设置了一些默认大小(只是为了显示初始窗口)

如何修复它

要修复此问题,请在封闭的场景中放置一些内容(和/或在场景构造函数中设置初始场景大小)


这是一个很好的阴影。:-)不幸的是,我不能把阴影归功于我:
import javafx.application.Application;
import javafx.scene.control.Label;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Group;
import javafx.scene.paint.Color;

public class TestApplication extends Application {
    private Stage stage;
    private Scene scene, scene2;

    public void start(Stage s) {
        scene = new Scene(new Group(new Label("1")), 200, 150);
        scene2 = new Scene(new Group(new Label("2")), 200, 150);

        scene.setFill(Color.GREEN);
        scene2.setFill(Color.ORANGE);

        scene.setOnMouseClicked(e -> changeScene(scene2));
        scene2.setOnMouseClicked(e -> changeScene(scene));

        stage = s;
        s.setScene(scene);
        s.show();
    }

    private void changeScene(Scene nex) {
        stage.setScene(nex);
    }

    public static void main(String[] args) {
        launch(args);
    }
}