【发布时间】:2016-08-01 18:38:26
【问题描述】:
我是一名初级 Java 程序员,正在当地大学完成“Java 101”课程。我也在推动自己学习一些额外的主题,包括 Java FX。我已经完成了 Oracle 网站上的 Java FX 教程,还观看了一些 YouTube 视频,还阅读了“Java FX for Dummies”(这是我能为初学者找到的最好的书。)所有这些材料教会了我一个很多基础知识,但一些(应该)相对简单的东西让我无法理解。
例如:假设我有一个 Java FX 程序,它在一个舞台上使用多个场景。当用户点击“切换!”按钮,第二个场景被替换为第一个场景。简单。我可以在一个 .java 文件中完成所有这些,没问题。 (见下面的代码)
但是我的 .java 类文件变得非常长并且难以解决。如果我可以将一个场景定义/声明/初始化为一个 .java 文件中的一个类,而将第二个场景定义/声明/初始化为另一个 .java 文件中的另一个类,那就太好了。这将使跟踪每个场景的组件变得更加容易。问题是,我不知道该怎么做。
我想你会编写一个 Scene1.java 类,然后是一个 Scene2.java 类,当你想要切换场景时,只需在两者之间传递舞台对象。但是我找不到如何做到这一点的示例,而且我所有的尝试都会导致编译器错误或非常可怕的运行时错误。
有谁知道如何做到这一点?如果是这样,我需要做些什么来修改下面的 SwitchScenes2() 方法以创建新的 Scene2 对象并将其传递给阶段?
谢谢!饶
/*
JavaFXExample.java
*/
import javafx.application.*;
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.layout.*;
import javafx.scene.control.*;
import javafx.event.*;
import javafx.geometry.*;
public class JavaFXExample extends Application{
public static void main(String[] args){
launch(args);
}
Button btnSw1;
Button btnSw2;
Button btnClose;
HBox hbox1;
VBox vbox1;
Scene scene1;
Scene scene2;
Stage stage;
@Override public void start(Stage primaryStage){
btnSw1 = new Button("Switch Scenes!");
btnSw1.setOnAction(
e -> SwitchScenes2() );
btnSw2 = new Button("Switch back!");
btnSw2.setOnAction(
e -> SwitchScenes1() );
btnClose = new Button();
btnClose.setText("Close me!");
btnClose.setOnAction(e -> CloseWindowClick());
hbox1 = new HBox(10);
hbox1.getChildren().addAll(btnSw1);
vbox1 = new VBox(10);
vbox1.getChildren().addAll(btnSw2, btnClose);
scene1 = new Scene(hbox1, 300, 300);
scene2 = new Scene(vbox1, 200, 400);
stage = primaryStage;
stage.setScene(scene1);
stage.setTitle("Example App");
stage.show();
}
public void SwitchScenes1(){
stage.setScene(scene1);
}
public void SwitchScenes2(){
stage.setScene(scene2);
}
public void CloseWindowClick(){
stage.close();
}
}
【问题讨论】: