尝试将变量传递给javafx / scenebuilder中的另一个控制器时出错

时间:2018-10-17 15:01:54

标签: java eclipse javafx scenebuilder

我正在制作一个简单的程序,其中我试图将一个TextField中的字符串添加到另一个场景中的ListView中。问题是当我将字符串传递给将其添加到列表的方法时,我得到了NullPointerException。

以下是主要场景的控制器代码:

import java.io.IOException;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.stage.Stage;

public class MainPageController {

@FXML TextField txtfield;

public void addButton(ActionEvent event) {

    String a=txtfield.getText();
    FXMLLoader loader= new FXMLLoader();
    loader.setLocation(getClass().getResource("/progra/view/ListView.fxml"));
    ListController obj=loader.getController();
    obj.addList(a);// <----NullPointerException

}

public void openList(ActionEvent event) throws IOException {

    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/program /view/ListView.fxml"));
    Parent root1 = (Parent) fxmlLoader.load();
    Stage stage = new Stage();
    stage.setScene(new Scene(root1));  
    stage.show();

}
}

以下是列表场景的控制器的代码:

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

public class ListController{

@FXML
ListView<String> listofstrs;

public void addList(String a) {

    listofstrs.getItems().add(a);

}
}

我需要做什么来解决它?如果我可以添加的话,是否可以在另一个阶段/场景中将变量添加到ListView(或任何其他文本容器)而无需打开包含它的阶段/场景,当您打开它时,您会看到添加的内容吗?如果是这样,我需要添加什么?

1 个答案:

答案 0 :(得分:0)

由于您正在调用getController()方法,并且未在Java源代码中设置控制器,因此必须在fxml文件中定义控制器。您可以发布fxml源代码吗?

在您的fxml中,您的根元素应将fx:controller属性设置为控制器的类路径,例如:

fx:controller="com.class.path.to.ListController