在JavaFX/FXML/SceneBuilder中的屏幕之间传递参数

在JavaFX/FXML/SceneBuilder中的屏幕之间传递参数,javafx,fxml,scenebuilder,fxmlloader,Javafx,Fxml,Scenebuilder,Fxmlloader,我正在尝试使用SceneBuilder和FXML构建一个简单的概念验证程序,它由两个屏幕组成。第一个屏幕只是一个文本字段和一个按钮,将您带到第二个屏幕,第二个屏幕只有一个标签,理想情况下,当按下按钮时,该标签将显示文本字段中的任何内容。每个屏幕都有自己的FXML文件和控制器。我读过关于FXMLLoader的上、下和侧面的文章,因为我的研究表明这是完成这项工作的理想方式,但我似乎仍然无法辨别如何正确使用它。最后,我想在角色扮演游戏的一种“角色创建”游戏前屏幕中实现这一点,玩家的统计滚动/库存选择从

我正在尝试使用SceneBuilder和FXML构建一个简单的概念验证程序,它由两个屏幕组成。第一个屏幕只是一个文本字段和一个按钮,将您带到第二个屏幕,第二个屏幕只有一个标签,理想情况下,当按下按钮时,该标签将显示文本字段中的任何内容。每个屏幕都有自己的FXML文件和控制器。我读过关于FXMLLoader的上、下和侧面的文章,因为我的研究表明这是完成这项工作的理想方式,但我似乎仍然无法辨别如何正确使用它。最后,我想在角色扮演游戏的一种“角色创建”游戏前屏幕中实现这一点,玩家的统计滚动/库存选择从最初的屏幕移动到计算/处理的模型,或者移动到第二个屏幕控制器进行显示。

好的,这是一个排序的答案,请相信我,我找到了一个Sahil Huseynzade的视频,我想它终于让我点击了。我在想,我可以使用FXMLLoader作为某种导入,我可以在创建控制器的过程中使用它,以便随意访问其他控制器。我在下面复制了一些使用FXMLLoader的代码,其中有一些关于我认为FXMLLoader如何工作的注释。很抱歉,如果从技术角度来看,解释迟钝或措词不当,或者如果我在所有这些方面都是一个普通的新手/笨蛋。不过,我还有一个问题,我认为在回答中提问是一种不好的形式,有没有办法使信息在windows中动态更新?就像我可以有一个窗口有一个骰子滚动按钮,谁的结果会自动出现在另一个窗口

package twoscreentest;

import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.stage.Stage;

public class Screen1Controller implements Initializable {

    @FXML
    public Label label;
    @FXML
    public Button button;
    @FXML
    private TextField textCharName;

    public String testtext;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        label.setText(Byte.toString((byte) (Math.floor(Math.random()*6)+1)));
    }    

    @FXML
    private void btnSend(ActionEvent event) throws IOException {
        PlayerInfo player = new PlayerInfo(textCharName.getText(), Double.parseDouble(label.getText()));  // Creating the temporary container.
        //((Node)event.getSource()).getScene().getWindow().hide(); This is to close the previous window, for testing it was easier to disable it.
        FXMLLoader loader = new FXMLLoader(); // Creating a the FXMLLoader
        loader.setLocation(getClass().getResource("Screen2.fxml")); // Telling it to get the proper FXML file.
        loader.load(); // Loading said FXML.
        Parent p = loader.getRoot(); // Setting up the window, I think I get how this works,
        //probably...
        Stage stage = new Stage();
        stage.setScene(new Scene(p));
        Screen2Controller screen2controller = loader.getController(); // This right here I 
        //don't entirely get, I know that I'm using the loader to get the controller, but
        //what's with the "NameofControllerClass variablename"?
        screen2controller.setCurrentInfo(player); // Setting the empty container in
        // the second class' variables to the ones in the the temporary container that
        // I created earlier.
        screen2controller.testlabel.setText(testtext); // An additional test, setting a label
        // on the second screen to a variable I set in this controller with a separate button.
        stage.show(); // Create the second screen.

    }

    @FXML
    private void btnSend2(ActionEvent event) {

        testtext = "Hello world";
    }

}

两个屏幕最初是否打开?或者第二个屏幕在点击按钮时打开?第二个屏幕设置为在点击按钮时打开。请参见感谢@James_D,但问题是,我已经读过了,我仍然没有完全理解。我还没有找到FXMLLoader语法的详细说明,也没有找到如何使用它从另一个控制器访问一个控制器的变量,或者从非控制器类访问控制器的变量。我知道我创建了一个新的FXMLLoader,它使用getClass和getResources来获取另一个FXML文件,在下面的一行中,我应该以某种方式获取控制器,但这就是我失去线索的地方;它只是Java。您可能需要发布一些代码来显示您正在做什么。