0

我正在尝试为我的撤消功能删除一个元素,但我只想删除添加到 JTree 的最后一个东西。

对于删除,我只是在修改我的 Cut 方法:

private void performUndoAction() {        

        if (tree != null) {

            TreePath path = tree.getSelectionPath();
            if (path != null) {

                DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
                if (node != tree.getModel().getRoot()) {

                    DefaultMutableTreeNode parent = (DefaultMutableTreeNode) node.getParent();
                    if (node.getUserObject() instanceof Attribute) {

                        Attribute at = (Attribute) node.getUserObject();
                        at.getParent().removeAttribute(at);
                        cut = at;
                    }
                    else if (node.getUserObject() instanceof Element) {

                        Element el = (Element) node.getUserObject();
                        el.getParent().removeContent(el);
                        cut = el;
                    } else if (node.getUserObject() instanceof Text) {

                        cut = ((Text) node.getUserObject()).getText();
                        Element el = (Element) parent.getUserObject();
                        el.setText("");
                    }
                    parent.remove(node);
                    tree.updateUI();
                }
            }
        } 
    }       
4

1 回答 1

0

一种快速而肮脏的方法是制作第二棵树并在从主树中删除一个之前将所有节点添加到其中,撤消只需用之前的副本替换主树即可。不是最漂亮的解决方案,但它可能会让你超越这一点。

我实际上已经使用 arraylist 完成了此操作,并且只是从 arraylist 内容构建树。

于 2012-07-18T04:11:46.917 回答