Несколько сцен в 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);