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