【发布时间】:2016-11-13 16:57:15
【问题描述】:
我对 stackoverflow 和 javafx 都比较陌生,所以请善待。
我在做什么的描述:
我正在制作一个简单的问答游戏。第一个窗口就像一个欢迎/开始屏幕,当单击该按钮时,我们会进入所有类别按钮所在的第二个屏幕,当单击其中一个按钮时,它将随机选择用户选择的那种类别的问题第三个也是最后一个窗口将显示问题类别作为标签,问题作为文本字段,answear 作为文本字段。
问题: 每当单击一个类别时,我都需要该当前控制器来设置下一个控制器的文本字段和标签。我还没有走到这一步。当我在第二个控制器 FXMLCategoriesDocumentController 中调用 setQuestion 方法时,我只是得到一个 nullpointerexception,当我尝试调试它时,它只是说实例化的“questControll”一直为空,而“questControll.question/category/answear”从空对象引用
代码:
第二个控制器
public class FXMLCategoriesDocumentController implements Initializable {
/**
* Initializes the controller class.
*/
private FXMLQuestionDocumentController questControll;
private Question quest;
@FXML
private void geografButtonAction(ActionEvent event) {
try {
FXMLLoader fxmlQuestLoader = new FXMLLoader(getClass().getResource("FXMLQuestionDocument.fxml"));
this.questControll = fxmlQuestLoader.<FXMLQuestionDocumentController>getController();
quest = new Question("Geografi", "Vad heter Sveriges huvudstad?", "Stockholm");
questControll.setQuestion(quest.getCategory(), quest.getQuestion(), quest.getAnswear());
Parent root1 = (Parent) fxmlQuestLoader.load();
root1.setId("pane");
Stage app_stage = (Stage)((Node) event.getSource()).getScene().getWindow();
Scene root1_scene = new Scene(root1);
root1_scene.getStylesheets().addAll(this.getClass().getResource("style.css").toExternalForm());
app_stage.hide();
app_stage.setScene(root1_scene);
app_stage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
第三个控制器
public class FXMLQuestionDocumentController implements Initializable {
private FXMLCategoriesDocumentController catControll;
private Question quest;
@FXML
public Label category = new Label();
@FXML
public TextField question = new TextField();
@FXML
public TextField answear = new TextField();
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
}
public void setQuestion(String cat, String quest, String ans){
if(category.getText() == null || question.getText() == null || answear.getText() == null){
System.out.println("everything is null");
}else{
category.setText(cat);
question.setText(quest);
answear.setText(ans);
}
}
问题类
public class Question {
private String category;
private String question;
private String answear;
public Question(String cat, String quest, String ans){
this.category = cat;
this.question = quest;
this.answear = ans;
}
public void setCategory(String cat){
this.category = cat;
}
public void setQuestion(String quest){
this.question = quest;
}
public void setAnswear(String ans){
this.answear = ans;
}
public String getCategory(){
return category;
}
public String getQuestion(){
return question;
}
public String getAnswear(){
return answear;
}
}
FXML 第二控制器(类别) category xml
FXML 第三控制器(问题)
【问题讨论】: