java primary stage_关于java:JavaFX更改场景而不是舞台

我目前正在编写程序,并使用JavaFX作为主要的GUI设置。目前,当我进入每种方法时,我正在打开和关闭每个阶段。

对于用户来说,这有点烦人,因为他们在浏览程序时会打开和关闭许多屏幕。

我的问题是,有没有一种方法可以使我每次进入程序的不同部分时都不必打开舞台,而是可以在场景之间进行切换?在这种情况下,场景之间的切换是否正确?我需要在方法之间过渡吗?

正如您可能会告诉我的那样,我才刚刚开始使用JavaFX,因此希望能从中汲取一点教训。

编辑:我决定使用JavaFXML更新我的应用程序,但是我很难将场景传递到控制器中。这是我的控制器;

public class MainApp extends Application {

@FXML

public Stage primaryStage;

@FXML

private AnchorPane rootLayout;

@FXML

private JobInterface jInterface;

@Override

public void start(Stage primaryStage) {

primaryStage = new Stage();

setPrimaryStage(primaryStage);

initRootLayout();

}

@FXML

public void initRootLayout(){

try {

primaryStage = getPrimaryStage();

FXMLLoader loader = new FXMLLoader();

loader.setLocation(MainApp.class.getResource("MainInterface.fxml"));

rootLayout = (AnchorPane) loader.load();

Scene scene = new Scene(rootLayout);

primaryStage.setScene(scene);

primaryStage.show();

setPrimaryStage(primaryStage);

} catch (IOException e) {

e.printStackTrace();

}

}

@FXML

private void setJobLayout(){

primaryStage = getPrimaryStage();

jInterface = new JobInterface();

jInterface.initJobLayout();

primaryStage.setScene(jInterface.getScene());

}

public static void main(String[] args) {

launch(args);

}

public Stage getPrimaryStage() {

return primaryStage;

}

public void setPrimaryStage(Stage primaryStage) {

this.primaryStage = primaryStage;

}

}

这是一种使用不同的FXML文件更改场景,然后尝试将场景传递回控制器的方法。

public class JobInterface {

private AnchorPane rootLayout;

private Scene scene;

public void initJobLayout(){

try {

FXMLLoader loader = new FXMLLoader();

loader.setLocation(MainApp.class.getResource("JobInterface.fxml"));

rootLayout = (AnchorPane) loader.load();

scene = new Scene(rootLayout);

setScene(scene);

} catch (IOException e) {

e.printStackTrace();

}

}

public Scene getScene() {

return scene;

}

public void setScene(Scene scene) {

this.scene = scene;

}

}

我现在遇到的问题是主应用程序中此行上的NullPointerException。

primaryStage.setScene(jInterface.getScene());

关于我要去哪里的任何想法?

是的,您可以保留JavaFX在初始化时提供的主要阶段,并为不同的UI"页面"更改其场景。或者,由于场景只有一个根节点布局,因此您甚至可以使用同一场景并在不同的"页面"上更改其根节点。在这两种情况下,请不要忘记导航到新的"页面"后调用primaryStage.sizeToScene()。

所以我只需要通过每种方法来完成一下阶段?可以正常工作吗?示例:uInterface.UserUI(connection,primaryStage);

有不同的方法。有些人将主要阶段保持为公共静态并直接访问它。有些人通过(在控制器类中)anynode.getScene()获得场景,或通过anynode.getScene()。getWindow()进行舞台演出。

@jbanks是的,可以正常工作。或者,您可以在UserInterface类中定义getScene()方法,返回其创建的Scene,然后在登录按钮处理程序中执行primaryStage.setScene(uInterface.getScene())。有很多方法...

@James_D,我已经编辑了上面的问题以针对我遇到的FXML问题进行修改

非动画

要在没有动画教程的情况下更改场景:

http://docs.oracle.com/javafx/2/api/javafx/stage/Stage.html#setScene%28javafx.scene.Scene%29

http://docs.oracle.com/javafx/2/api/javafx/scene/layout/Pane.html#getChildren%28%29

动画的

使用动画教程更改场景:

https://blogs.oracle.com/acaicedo/entry/managing_multiple_screens_in_javafx1

https://blogs.oracle.com/acaicedo/entry/managing_multiple_screens_in_javafx

链接不再起作用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值