首页 > 解决方案 > 我在 javaFX 中工作,想通过在 obserableArrayList 中添加数据来填充 tabelView,方法是访问另一个控制器但不工作

问题描述

我使用savedCustomerInfoController该类使用SceneBuilder制作表格。在这个控制器中,我尝试savedCustomerInfo使用FXMLLoader. 我使用DataTableAccessor类来填充表格。但这不起作用,我找不到任何问题,即使 IntelliJ IDEA 也没有显示任何错误或警告。请帮我。如果我在写这个问题或在我的代码中犯了一个愚蠢的错误,请原谅我,因为我是新来的并且使用 JavaFX 工具包。

第一个控制器,我在其中制作包含 TabelView 和可观察 ArrayList 的第二个控制器的对象

public class Controller implements Initializable {


    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {

        try {

            FXMLLoader loader = new FXMLLoader(getClass().getResource("/sample/savedCustomerInfo.fxml"));
            Region region = loader.load();
            savedCustomerInfoController obj = new savedCustomerInfoController();

            obj.dataList.add(new DataTableAccessor("50" , "sarmad"));
            obj.dataList.add(new DataTableAccessor("50" , "sarmad"));


        }
        catch (IOException e)
        {
            System.out.println(e);
        }
    }

第二控制器

    public class savedCustomerInfoController implements Initializable
{

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {
        ageClm.setCellValueFactory(new PropertyValueFactory<DataTableAccessor , String>("age"));
        nameClm.setCellValueFactory(new PropertyValueFactory<DataTableAccessor , String>("name"));

        dataTable.setItems(dataList);

    }

    @FXML
    private TableColumn<DataTableAccessor, String> ageClm;

    @FXML
    private TableView<DataTableAccessor> dataTable;

    @FXML
    private TableColumn<DataTableAccessor, String> nameClm;

    ObservableList<DataTableAccessor> dataList = FXCollections.observableArrayList();

类控制 tableView

    public class DataTableAccessor {

    private SimpleStringProperty age;
    private SimpleStringProperty name;

    public String getAge() {
        return age.get();
    }

    public SimpleStringProperty ageProperty() {
        return age;
    }

    public void setAge(String age) {
        this.age.set(age);
    }

    public String getName() {
        return name.get();
    }

    public SimpleStringProperty nameProperty() {
        return name;
    }

    public void setName(String name) {
        this.name.set(name);
    }

    public DataTableAccessor(String age, String name)
    {
        this.age = new SimpleStringProperty(age);
        this.name = new SimpleStringProperty(name);
    }

}

输出

上面代码的表格输出

标签: javajavafx

解决方案


您需要访问由 FXMLLoader 创建的 savedCustomerInfoController 实例,而不是创建一个新实例。

代替

savedCustomerInfoController obj = new savedCustomerInfoController();

savedCustomerInfoController obj = (savedCustomerInfoController)loader.getController();

那应该可以解决您的问题。如果没有,您将需要发布其余代码。


推荐阅读