【问题标题】:Adding items into tableview without using an instance of any class在不使用任何类的实例的情况下将项目添加到 tableview
【发布时间】:2019-05-17 08:57:03
【问题描述】:

我正在设计一个关于对某物进行编目的项目。在这个项目中,用户必须能够按照自己的意愿创建自己的表。因此我没有任何静态类和它的实例。

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

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

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

更多细节,举例说明;

listview 包含所有目录名称,根据 lisview 选择 tableview 将在边界窗格的中心动态创建。

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

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

有没有办法创建动态类?

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

here是我们项目的github链接

【问题讨论】:

    标签: java javafx tableview dynamic-class-creation


    【解决方案1】:

    只需使用String[] 为行(或类似的数据结构)的每一列存储Strings 作为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&lt;String[]&gt; table 可以这样完成:

    table.getItems().add(userInputs);
    

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

    【讨论】:

    • 谢谢你的回答,我只需要再走一步,假设我将用户的输入分别存储到 userInputs[] 数组中,如何添加到 tableView 中?
    • 对答案添加了一点解释。
    • 我欠你很多,fabian你救我脱离地狱!太感谢了 !我正在获取 tableview 选定项目,例如 String[] mySelection = tableView.getSelectionModel().getSelectedItem();最后我自己做了点什么。
    【解决方案2】:

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

    【讨论】:

    • 让我再次澄清一下,用户可以创建各种目录,这些目录可能包含各种属性(列)和数据类型(int、string、double、date)。那么你能告诉我我应该如何实现那个超类吗?我应该在里面定义什么?
    • 您是否有已知数量有限的可能类,或者这些类是由用户在运行时创建的?如果是后一种情况,你会遇到雷区,我认为你应该避免它,但如果坚持,你可以快速搜索一下如何在运行时创建类。
    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2015-01-10
    • 2017-07-29
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多