【问题标题】:JavaFX: Can't set items of TableView to FilteredList of its own itemsJavaFX:无法将 TableView 的项目设置为自己项目的 FilteredList
【发布时间】:2020-05-27 16:45:28
【问题描述】:

我正在尝试将 TableView 的项目设置为它自己的项目的 FilteredList,但这样做会出错。

public class FilteredTableView<T> {

    private TableView<?> tableView;
    FilteredList<?> filteredData;

    public <T> FilteredTableView(TableView<T> tableView) {
        this.tableView = tableView;
        this.filteredData = new FilteredList<>(tableView.getItems(), s -> true);
        this.tableView.setItems(this.filteredData); // The method setItems(ObservableList<capture#4-of ?>) in the type TableView<capture#4-of ?> is not applicable for the arguments (FilteredList<capture#5-of ?>)
    }

}

有没有办法解决这个问题,而不必为我想放入不同 TableView 的每个不同对象创建一个新的 FilteredTableViewObjectX 类?感谢您的帮助!

【问题讨论】:

    标签: java javafx observablelist


    【解决方案1】:

    由于您的类已经使用T 类型参数化,您的TableViewFilteredList 变量可以引用相同的类型。

    请注意,方法应该被参数化,因为方法中的T 将引用与类中的T 不同的类型变量(导致非常有趣的编译错误,例如“无法从 TableView&lt;T&gt; 转换为 TableView&lt;T&gt;”)。

    public class FilteredTableView<T> {
    
        private TableView<T> tableView;
        FilteredList<T> filteredData;
    
        public FilteredTableView(TableView<T> tableView) {
            this.tableView = tableView;
            this.filteredData = new FilteredList<>(tableView.getItems(), s -> true);
            this.tableView.setItems(this.filteredData); 
        }
    
    }
    

    【讨论】:

    • 感谢您的回答!我记得早些时候看到过这个错误,但它现在正在工作(使用你的答案):)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 2015-12-14
    • 2020-11-01
    • 2016-05-13
    • 1970-01-01
    相关资源
    最近更新 更多