Swing Filter-Problem

asdsadsd

Mitglied
Hallo
ich beschäftige mich gerade mit dem eine GUI-APP und habe ich ein Problem :
Also wenn ich eine neue Cateogry einfüge zu einem anderen Cateogry bzw. zum Root und sieht die Hierarchie Struktur wie im Bild (1).
das Problem liegt darin , wenn ich jetzt eine Filter mache dann wird die Hierarchie Struktur weg und werden alle Cateogryen zum Root gehören wie im Bild (2) und wenn ich den Filter lösche dann erscheint keine Elende mehr wie im Bild (3).
ich weiße nicht wo genau das Problem ist .
LG

12037
bildschirmfoto-2019-06-02-um-15-10-52-png.12038
12039

Java:
public void addItem() {
        getModel().setAddingNode(true);

        DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
        WalletItem item = (WalletItem) node.getUserObject();
        WalletItem parentItem;
        if (item.getType() == ItemType.category) {
            parentItem = item;
        } else {
            //this item is node leaf
            parentItem = item.getParent();
        }


        WalletItem newItem;
        if (getModel().isRoot(item)) {
            //add another category to the  root
            newItem = new WalletItem(ItemType.category, "New Category - Untitled");
        } else
            newItem = new WalletItem(ItemType.item, "New Item- Untitled");


        DefaultMutableTreeNode newChildNode = addItemAndNode(parentItem, newItem);


        //Make sure the user can see the lovely new node.
        tree.scrollPathToVisible(new TreePath(newChildNode.getPath()));

        form.displayWalletItemDetails(getModel().getCurrentItem(), DisplayMode.add);

        //now set selection to this new node
        //this will fire the changeNode event.
        tree.getSelectionModel().setSelectionPath(new TreePath(newChildNode.getPath()));


//        if (SystemSettings.debug) {
//            System.out.println(getModel().dumpFlatList());
//        }

        getModel().setAddingNode(false);


    }
    public void addCat() {
        getModel().setAddingNode(true);
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
        WalletItem item = (WalletItem) node.getUserObject();
        WalletItem parentItem = getModel().getCurrentItem();;
        WalletItem newItem = getModel().getCurrentItem();
        List<WalletItem> rootCats = new ArrayList<>();
        WalletItem rootItem = (WalletItem) rootNode.getUserObject();
        if (getModel().isRoot(item))
        {
            newItem = new WalletItem(ItemType.category, "New Category - Untitled");
        }
        else if(!getModel().isRoot(item))
        if(item.getType() == ItemType.category)
            //add another category to the  another category
            {
                newItem = new WalletItem(ItemType.category, "New Category - Untitled");
            }


        //rebuildTree(node , rootCats );
        DefaultMutableTreeNode newChildNode = addItemAndNode(parentItem, newItem);
        //Make sure the user can see the lovely new node.
        tree.scrollPathToVisible(new TreePath(newChildNode.getPath()));
        form.displayWalletItemDetails(getModel().getCurrentItem(), DisplayMode.add);
        //now set selection to this new node
        //this will fire the changeNode event.
        tree.getSelectionModel().setSelectionPath(new TreePath(newChildNode.getPath()));
        getModel().setAddingNode(false);


    }
*******************
public void filterItems(String filter){
        if(rootNode == null) return;
        WalletItem rootItem = (WalletItem) rootNode.getUserObject();
        rootNode.removeAllChildren();
        if(rootItem.hasChildren()){
            List<WalletItem> rootChildren = rootItem.getChildren();
            for(int i = 0; i < rootChildren.size(); i++){
                WalletItem category = rootChildren.get(i);
                if(category.isMatch(filter)){
                    //System.out.println("cat match: " +category);
                    DefaultMutableTreeNode catNode = new DefaultMutableTreeNode(category);
                    catNode.children();
                    rootNode.add(catNode);

                    List<WalletItem> catChildren = category.getChildren();
                    if(catChildren != null){
                        for(int a = 0; a < catChildren.size(); a++){
                            WalletItem catChild = catChildren.get(a);
                            if(catChild.isMatch(filter)){
                                catNode.add(new DefaultMutableTreeNode(catChild));
                            }
                        }
                    }
                } else {
                    DefaultMutableTreeNode catNode = new DefaultMutableTreeNode(category);

                    List<WalletItem> catChildren = category.getChildren();
                    if(catChildren != null){
                        for(int a = 0; a < catChildren.size(); a++){
                            if(catChildren.get(a).isMatch(filter)){
                                catNode.add(new DefaultMutableTreeNode(catChildren.get(a)));
                            }
                        }
                        if(catNode.getChildCount() > 0) rootNode.add(catNode);
                    }
                }
            }
            treeModel.reload();
            expandTree();
        }
    }

******************
public void doFilter() {
        if (fldFilter.getText() != null && fldFilter.getText().trim().length() > 0) {
            switchMode(TreePanelMode.filter);

            //listExploreView.filterItems(fldFilter.getText());
            treeExploreView.filterItems(fldFilter.getText());
        }
    }
    **************
    public void buildTreeFromFlatList() {
        if (itemsFlatList.size() == 0)
            return;

        WalletItem rootNode = itemsFlatList.get(0);


        //reset first
        for (int i = 0; i < itemsFlatList.size(); i++) {
            WalletItem item = itemsFlatList.get(i);
            item.setChildren(null);
            item.setParent(null);
        }


        WalletItem lastParent = rootNode;
        List<WalletItem> rootCats = new ArrayList<>();
        List<WalletItem> tempChildList = new ArrayList<>();
        for (int i = 1; i < itemsFlatList.size(); i++) {
            WalletItem item = itemsFlatList.get(i);

            if (ItemType.category == item.getType()) {
                //rootNode.addChild(item);
                rootCats.add(item);

                if (lastParent != item) {
                    //parent changed.
                    Collections.sort(tempChildList);

                    for (WalletItem c : tempChildList) {
                        lastParent.addChild(c);
                    }
                    tempChildList.clear();
                    lastParent = item;
                }


            } else {
                tempChildList.add(item);
                //lastParent.addChild(item);
            }
        }

        Collections.sort(rootCats);
        for (WalletItem c : rootCats) {
            rootNode.addChild(c);
        }

        Collections.sort(tempChildList);
        for (WalletItem c : tempChildList) {
            lastParent.addChild(c);
        }


    }
    ***********
 

Anhänge

  • Bildschirmfoto 2019-06-02 um 15.10.52.png
    Bildschirmfoto 2019-06-02 um 15.10.52.png
    28,8 KB · Aufrufe: 176

Neue Themen


Zurück
Oben