按下testButton
后,我不知道如何切换场景。 Start
方法不允许我对testStage
执行任何操作。我的意思是我不能把它作为我的新主舞台或其他任何东西。
public class GUI extends Application
{
public static void initialize(String[] args)
{
launch(args);
}
public static Stage testStage;
@Override
public void start(Stage mainStage) throws Exception
{
Scene scene = null;
scene = GUIMainScene.setScene();
mainStage.setScene(scene);
mainStage.show();
}
}
这是我的第二课,或者更确切地说来自这个课程的一些部分:
public class GUIMainScene
{
public static Scene setScene()
{
setLabel();
setButtons();
setLayout();
return new Scene(layout);
}
private static void setAddingButton()
{
testButton.setText("Give us a dog");
testButton = setButtonSize(testButton);
testButton.setOnAction(e -> GUI.testStage.setScene(GUITestScene.setScene()));
}
}
答案 0 :(得分:0)
有一些简单的解决方案,您可以传递primaryStage并更改其他类中的场景,或者传递场景并更改根节点,但我认为最好的方法是使用SimpleBooleanProperty / SimpleIntegerProperty。这允许您设置更改侦听器,并根据您可以控制从主类显示哪个gui而不传递任何内容。
示例:
public class GuiClass {
private SimpleBooleanProperty guiSwitch;
public GuiClass() {
guiSwitch = new SimpleBooleanProperty(false);
}
public SimpleBooleanProperty getGuiSwitchProp() {
return guiSwitch;
}
public StackPane getGui() {
StackPane root = new StackPane();
Button btn = new Button("Click me");
root.getChildren().add(btn);
btn.setOnMouseClicked(ev -> setGuiSwitch(true));
return root;
}
public void setGuiSwitch(Boolean value) {
this.guiSwitch.set(value);
}
public boolean getGuiSwitch() {
return this.guiSwitch.get();
}
}
然后在你的主要:
public class GUI extends Application
{
public static void initialize(String[] args)
{
launch(args);
}
@Override
public void start(Stage mainStage) throws Exception
{
GuiClass gui1 = new GuiClass();
GuiClass gui2 = new GuiClass();
gui1.getGuiSwitchProp().addListener(listener -> {
if (gui1.getGuiSwitch()) {
scene.setRoot(gui2.getGui());
gui1.setGuiSwitch(false);
}
});
gui2.getGuiSwitchProp().addListener(listener -> {
if (gui2.getGuiSwitch()) {
scene.setRoot(gui1.getGui());
gui2.setGuiSwitch(false);
}
});
Scene scene = new Scene(gui.getGui(), 300, 300);
mainStage.setScene(scene);
mainStage.show();
}
}
你可以在GuiClass中为按钮传递文本以查看它实际上是在改变,如果你想有更多选项来切换场景你可以使用SimpleIntegerProperty然后有0默认值,-1回去,1去在下一个等。