排序/过滤ObservableList,它包含重复的条目并显示为TreeTableView

时间:2015-03-08 18:11:38

标签: java javafx-8

我有一个ObservableList,它包含Auftrag类型的对象。 对象Auftrag有一个属性NR,它可能在ObservableList中出现多次(重复),但其他属性内容不同。

我尝试使用它来显示根TreeItem下具有相同NR的所有条目。

现在我尝试在TreeTableView中显示数据,其中一堆Auftrag对象的第一个NR项字符串应该是根TreeItem,并且具有相同NR的以下项应该是子TreeItems。

这是问题所在。仅显示第一个项目,并显示所有其他项目。 下面是一些示例代码,首先创建TreeTableView

@FXML
private TreeTableView<Auftrag> abTreeTable;

现在创建一个列并设置root并添加列

TreeTableColumn<Auftrag,String> nrTreeCol = new TreeTableColumn<>("NR");
nrTreeCol.setMinWidth(80);
nrTreeCol.setCellValueFactory(
(TreeTableColumn.CellDataFeatures<Auftrag,String> param) ->new ReadOnlyObjectWrapper<String>(param.getValue().getValue().getNR()));
abTreeTable.setRoot(createTreeStructure(u));
abTreeTable.getColumns().add(nrTreeCol);

在这里我创建了结构

private TreeItem createTreeStructure(ObservableList<Auftrag> items){
    int itemcount = items.size();
    TreeItem<Auftrag> main = new TreeItem<Auftrag>(items.get(0));
    for (int i =1; i < itemcount; i++) {
        String ab = items.get(i).getNR();
        ObservableList<Auftrag> same = getSameAuftrag(items,ab);
        TreeItem<Auftrag> root = new TreeItem<Auftrag>(items.get(i));
        same.forEach(item->{
            TreeItem<Auftrag> child = new TreeItem<Auftrag>(item);
            root.getChildren().add(child);
        });
        main.getChildren().add(root);
    }

    return main;

此处查找相同的NR已完成,但似乎无法正常工作

private ObservableList<Auftrag> getSameAuftrag(ObservableList<Auftrag> items, String ab){
        ObservableList<Auftrag> same = FXCollections.observableArrayList();
        for (int i = 0; i < items.size(); i++) {
            if (items.get(i).getNR() == ab){
                same.add(items.get(i));
            }
        }

        return same;
    }

它看起来像这个

root TreeItem and all other items are child

在这里你看到getSameAuftrag函数似乎无法正常工作,因为有五个NR应该在根节点中具有相同的字符串...

three times same NR

我期望的是一个根行(TreeItem),其中NR作为标题,如果我展开它应该显示所有具有相同NR的子TreeItem ...

希望有人可以提供帮助

0 个答案:

没有答案