JavaFX如何改变阶段

JavaFX如何改变阶段,java,netbeans,javafx,scene,scenebuilder,Java,Netbeans,Javafx,Scene,Scenebuilder,我正在使用Netbeans 7.2和Scene Builder 1.0开发一个JavaFX应用程序。我已经设置好了主屏幕,我想要它,所以我点击一个按钮,它会关闭主窗口并打开另一个。main Stage对象位于main类中,但controller类是独立的,无法访问它,因为它不是静态的,并且位于不同的类中。如何更改场景或舞台?找到项目FXML LoginDemo,这就是您需要的。为了快速参考,我在这里复制粘贴主java类;) 您也可以这样做: 这样修改controller.java Stage t

我正在使用Netbeans 7.2和Scene Builder 1.0开发一个JavaFX应用程序。我已经设置好了主屏幕,我想要它,所以我点击一个按钮,它会关闭主窗口并打开另一个。main Stage对象位于main类中,但controller类是独立的,无法访问它,因为它不是静态的,并且位于不同的类中。如何更改场景或舞台?

找到项目FXML LoginDemo,这就是您需要的。为了快速参考,我在这里复制粘贴主java类;)


您也可以这样做:

这样修改controller.java

Stage thisStage;

public void setStage (Stage stage){
    thisStage = stage;
}

public void showStage(){
    thisStage.setTitle("Titel in der MainController.java geändert");
    thisStage.show();
}
重要的是不要在initialize方法中使用此阶段

通过以下方式修改Mainclass:

@Override
public void start(Stage stage) throws Exception {
    URL location = getClass().getResource("Main.fxml");
    FXMLLoader fxmlLoader = new FXMLLoader();
    fxmlLoader.setLocation(location);
    fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
    Parent root = (Parent) fxmlLoader.load(location.openStream());
    Scene scene = new Scene(root);
    stage.setScene(scene);
    MainController mainController = fxmlLoader.getController();
    mainController.setStage(stage);
    mainController.showStage();
}

您可以下载一个示例projekt(netbeans)。

我在这里可能会说类似的话,但我是这样做的:

(在本例中,我正在从Login.fxml转换到Home.fxml)

在LoginController.fxml类中,我创建了以下方法:

@FXML
private void login(javafx.event.ActionEvent event) throws IOException
{
    if(pwf1.getText().equals("dolphin"))
    {
            Parent blah = FXMLLoader.load(getClass().getResource("Home.fxml"));
            Scene scene = new Scene(blah);
            Stage appStage = (Stage) ((Node) event.getSource()).getScene().getWindow();
            appStage.setScene(scene);
            appStage.show();
    }
    else
    {
            label1.setText("Password is incorrect. Please Try Again");
    }
}

就这样

根据您的问题,最近我正在为JavaFX开发一个与iOS等效的NavigationController,使用推送和关闭视图的最简单思想

让我与社区分享代码:

这个想法,是要有一个非常非常简单的环境来帮助你在屏幕之间切换


希望对您有所帮助。

谢谢这正是我要找的!现在这样对吗?我的意思是,我可以使用这个并在应用类之外调用.replaceSceneContent吗?或者在今天(2015年),是否有一种正确的方法来实现阶段间的转变?谢谢=)我如何在控制器类中使用它?或者我可以只在主应用程序中使用这个吗?这个答案很旧,现在已经过时了:(链接断了,你能给另一个吗?
@FXML
private void login(javafx.event.ActionEvent event) throws IOException
{
    if(pwf1.getText().equals("dolphin"))
    {
            Parent blah = FXMLLoader.load(getClass().getResource("Home.fxml"));
            Scene scene = new Scene(blah);
            Stage appStage = (Stage) ((Node) event.getSource()).getScene().getWindow();
            appStage.setScene(scene);
            appStage.show();
    }
    else
    {
            label1.setText("Password is incorrect. Please Try Again");
    }
}