在不使用任何 class 的实例的情况下将项目添加到表视图中

Adding items into tableview without using an instance of any class

我正在设计一个关于编目内容的项目。在此项目中,用户必须能够按照自己的意愿创建自己的 table。因此我没有任何 static class 和它的实例。

我正在创建一个 diaglog 窗格,我可以根据数据库 table 的列名动态地为用户输入创建文本字段,但是如何将这些用户的输入添加到 table 视图中?

我可以将任何字符串输入添加到 ListView 中,我可以将用户字符串输入添加到 table 视图列中吗?

ListView<String> listView = new ListView();
public ObservableList<String> listCatalogNames = FXCollections.observableArrayList();
listCatalogNames.add("Books");

通过示例获得更多详细信息;

有包含所有目录名称的列表视图,根据 lisview 选择 table视图将在 borderpane 中心动态创建。

用户有书籍(姓名、作者、页码)和电影(姓名、年份、导演、流派)目录。

假设用户选择了电影,tableView 出现了 4 列并单击了添加按钮。使用 4 个文本字段创建的对话框窗格。在那之前我构建了所有东西,但我无法将用户的输入添加到 table 视图中,因为我没有任何静态 class 用于电影或书籍等

有什么方法可以创建动态 class 吗?

请给我一个想法并帮助我解决这种情况。

here就是我们项目的githublink

我想到的最简单的解决方案是使用 polymorphism。您可以创建 BookMovie 的超级 class,我们称它为 Item。然后你可以声明你的 table 包含 Item 并在需要时转换为具体的 classes 之一。

只需使用 String[] 将行的每一列(或类似的数据结构)的 String 存储为 TableView 的项目类型。从输入中创建一个 String[] 并将其添加到此 TableView:

应该很简单
static TableView<String[]> createTable(String... columnNames) {
    TableView<String[]> table = new TableView<>();

    for (int i = 0; i < columnNames.length; i++) {
        final int index = i;
        TableColumn<String[], String> column = new TableColumn<>(columnNames[i]);
        column.setCellValueFactory(cd -> new SimpleStringProperty(cd.getValue()[index]));
        table.getColumns().add(column);
    }

    return table;
}

String[] userInputs 添加到 TableView<String[]> table 可以这样完成:

table.getItems().add(userInputs);

可以在此处找到类似的问题(根据 ResultSet 的元数据创建 TableView):How to fill up a TableView with database data