Javafx Textfield设置对象名称

时间:2018-12-08 06:29:48

标签: java javafx fxml

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

我已经用设置器和获取器设置了一个播放器类来设置对象的名称,我已经在下面提供了代码!任何帮助将不胜感激!

欢迎控制器

@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();时,它返回null

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

谢谢!

1 个答案:

答案 0 :(得分:0)

对于其他任何要使用Player对象p1的类,都需要获取对其的引用。
如果您想在p1中使用Example.java,请按要求将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>

MainController.java

import javafx.fxml.FXML;
import javafx.scene.control.Label;

public class MainController {

    @FXML
    Label nameLabel;

    void setPlayerName(String name){
        nameLabel.setText(name);
    }
}

并编辑pressButton

@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();
    }
 }