在学习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中输入的任何内容。
谢谢!
答案 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();
}
}