Несколько сцен в JavaFX

Я пишу очень простое приложение в Javafx, где есть одна кнопка с текстовым полем на сцене как одна сцена.Теперь я хочу, чтобы при нажатии на кнопку я мог загрузить другую сцену с другой кнопкой и текстовым полем на сцене и удалить кнопку, которую я нажал вместе с предыдущим текстовым полем. Таким образом, щелчок кнопки должен загрузить новую сцену на сцене. есть намеки, как я могу это сделать ?

следуя совету Эрика:у меня есть этот код, и его работа так, как я хочу.

var showScene1 = true;
var showScene2 = false;
var showScene3 = false;

def stage = Stage
{
  title: "Hello World"

    var scene1 =Scene
    {
          content:
          [

                                  Text {
                          font : Font {
                                  size: 24
                          }
                          x: 10, y: 30
                          content: "HelloWorld from Scene1"
                  },
                  Button
                      {
                          text: "Click Me to change to Scene2 "
                          onMouseClicked: function( e: MouseEvent ):Void
                          {

                                  showScene2 = true;

                                  println("In scene 2");

                          }

                        }


          ]
     }



     var scene2 =Scene
        {
              content:
              [

                                      Text {
                              font : Font {
                                      size: 24
                              }
                              x: 10, y: 30
                              content: "HelloWorld from Scene2"
                      },
                      Button
                          {
                              text: "Click Me to change to Scene3 "
                              onMouseClicked: function( e: MouseEvent ):Void
                              {
                                      showScene1 = false;
                                      showScene2 = false;
                                      showScene3 = true;
                                      println("In scene 3");

                              }

                            }


              ]
         }

     var scene3 =Scene
        {
              content:
              [

                                      Text {
                              font : Font {
                                      size: 24
                              }
                              x: 10, y: 30
                              content: "HelloWorld from Scene3"
                      }


              ]
         }


scene: bind if (showScene2) then scene2
    else if (showScene1) then scene1
    else scene3

}

3 ответов


Если вы уверены, что у вас будет только 2 разных сцены, вы можете просто связать свойство сцены сцены так:

var showSecondScene = false;
var myButton = Button {
    onMouseClicked: function(e) { showSecondScene = true; }
}
def stage = Stage {
    scene: bind if (showSecondScene) then secondScene else firstScene
}

UPDATE: это действительно работает, если у вас есть какое-либо количество сцен, таких как:

scene: bind if (showScene1) then scene1
    else if (showScene2) then scene2
    else scene3

вы можете подумать, почему у вас будет более 2 сцен, вместо этого выбрав параметр "visible: false" на перекрывающихся узлах группы.


исключить все операторы if-else. Привязка непосредственно к переменной, содержащей текущую сцену.

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;

var currentScene: Scene;


def scene1: Scene = Scene {
    content: Text {
        font : Font {
            size : 24
        }
        x: 10, y: 30
        content: "Scene 1"
        onMouseClicked: function( e ):Void {
         currentScene = scene2;
       }
    }
}

def scene2: Scene = Scene {
    content: Text {
        font : Font {
            size : 24
        }
        x: 10, y: 30
        content: "Scene 2"
        onMouseClicked: function( e ):Void {
         currentScene = scene1;
       }
    }
}

Stage {
    title: "Multi-Scene"
    width: 250
    height: 80
    scene: bind currentScene
}

currentScene = scene1;   

Вы можете сделать вторую сцену, как вы сделали свой первый. В fuction первая кнопка, которую вы заменяете showScene2 = true; с: stage.setScene(scene2);