用于设置对象名称的Javafx Textfield

用于设置对象名称的Javafx Textfield,java,javafx,fxml,Java,Javafx,Fxml,在学习JavaFX时,我有两个文本字段,用户可以在其中输入两个玩家名称,我希望将其存储以用于程序(这是一个游戏),并在其他类中使用名称,包括maingame类。如果我在welcomecontroller中打印,当您单击submit时,它会打印输入的值;但是,在任何其他类中,如果我执行p1.getName();它返回“null” 我用setter和getter创建了一个player类来设置对象的名称,我包含了下面的代码!任何帮助都将不胜感激 欢迎控制器 @FXML private Button b

在学习JavaFX时,我有两个文本字段,用户可以在其中输入两个玩家名称,我希望将其存储以用于程序(这是一个游戏),并在其他类中使用名称,包括maingame类。如果我在welcomecontroller中打印,当您单击submit时,它会打印输入的值;但是,在任何其他类中,如果我执行p1.getName();它返回“null”

我用setter和getter创建了一个player类来设置对象的名称,我包含了下面的代码!任何帮助都将不胜感激

欢迎控制器

@FXML
private Button btn_start;

@FXML
public void pressButton(ActionEvent event){
    //Create and Set Player1 Name
    player p1 = new player();
    p1.setName(field_player1.getText());
    //Create and Set Player2 Name
    player p2 = new player();
    p2.setName(field_player2.getText());
    try {
    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("main.fxml"));
            Parent root = (Parent) fxmlLoader.load();
            Stage stage = new Stage();
            stage.setScene(new Scene(root));  
            stage.show();
    } catch(Exception e) {
       e.printStackTrace();
      }
 }
player.java

public class player {
    public String Name;

    public void Player(String Name) {
        this.Name = Name;
    }

    public String Name() {
        return Name;
    }

    public void setName(String Name) {
        this.Name = Name;
    }

    public String getName() {
        return this.Name;   
    }
}
因此,在除欢迎控制器之外的任何其他类中,每当我执行p1.getName();它返回空值

在欢迎控制器中,如果执行p1.getName();它将返回在textfield1中输入的任何内容


提前谢谢

对于任何其他类使用
Player
object
p1
它需要获得对它的引用
如果您想在
Example.java
中使用
p1
,正如您所要求的那样,您需要向它传递一个
p1
的引用。您可以通过多种方式实现,构造函数就是其中之一:

 new Example(p1);
塞特将是另一个

 Example ex = new Example();
 ex.setPlayer(p1); 
为了演示在用例中传递引用,请使用

main.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.StackPane?>

<StackPane xmlns="http://javafx.com/javafx/10.0.1" xmlns:fx="http://javafx.com/fxml/1" 
                                                            fx:controller="src.tests.xml.MainController">
   <children>
      <Label fx:id="nameLabel" text="Label" />
   </children>
</StackPane>
然后编辑
按按钮

@FXML
private Button btn_start;
@FXML
private TextField field_player;

@FXML
public void pressButton(ActionEvent event){

    Player p1 = new Player();
    p1.setName(field_player.getText());

    try {
            FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("main.fxml"));
            Parent root = (Parent) fxmlLoader.load();
            MainController mainController = (MainController)fxmlLoader.getController();
            mainController.setPlayerName(p1.getName()); //pass a reference of name to the other controller 
            Stage stage = new Stage();
            stage.setScene(new Scene(root));
            stage.show();
    } catch(Exception e) {
       e.printStackTrace();
    }
 }

如果任何其他类需要使用对象p1中的信息(
p1.getName();
),它需要获取对
p1
的引用。发布的代码不是也不会重现您所问的问题。因此,例如,如果我在这两个类旁边创建另一个类,比如“example.java”,并执行“System.out.println(p1.getName());”,据我所知,它应该获取我们在welcome controller类中设置“p1”名称的值,而不是这个,它返回null。嗨!谢谢你提供的信息,非常感谢!我创建Example.java只是为了测试,当我尝试前两个方法时,我得到一个错误,简单地告诉我创建一个局部变量/字段“p1”,如果我尝试其中一个,然后运行它,它仍然返回“null”,第二个方法可以工作,我可以看到该变量随后显示在另一个控制器中,但是,我如何在其他类中使用“p1”,例如,如果我想在另一个类中使用System.out.println(p1),让我们再次使用Example.java,并显示输入的名称?抱歉,我无法回答。我不知道你所说的前两种方法是什么意思,或者“其他控制器
”。有关
Example`的问题,请发表一篇新文章并加入mcve。对于原始问题,请使用我发布的代码。
@FXML
private Button btn_start;
@FXML
private TextField field_player;

@FXML
public void pressButton(ActionEvent event){

    Player p1 = new Player();
    p1.setName(field_player.getText());

    try {
            FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("main.fxml"));
            Parent root = (Parent) fxmlLoader.load();
            MainController mainController = (MainController)fxmlLoader.getController();
            mainController.setPlayerName(p1.getName()); //pass a reference of name to the other controller 
            Stage stage = new Stage();
            stage.setScene(new Scene(root));
            stage.show();
    } catch(Exception e) {
       e.printStackTrace();
    }
 }