2012-07-18 3 views
0

내 실행 취소 기능을 위해 요소를 제거하려고하지만 JTree에 마지막으로 추가 된 것을 제거하려고합니다. 제거를위한 .getSelectionPath()를 사용하여 요소를 선택하지 않고 JTree에서 요소를 제거하려면 어떻게해야합니까?

는 그냥 잘라 내 방법을 수정 해요 :

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(); 
       } 
      } 
     } 
    }  
+1

1) 더 빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. 2) 이것은 '선택되지 않은 노드에 대한 참조를 얻는 방법은 무엇입니까?' 그게 맞습니까? –

답변

0

신속하고 더러운 방법은 두 번째 트리를 만들고 그것에 모든 노드를 추가하는 것입니다 주에서 하나를 제거하기 전에 트리를 제거하고 이전 트리의 복사본으로 주 트리를 바꿉니다. 가장 좋은 해결책은 아니지만, 그 점을 넘어서게 할 수 있습니다.

저는 실제로 arraylist와 함께 이것을 수행하고 arraylist 콘텐츠에서 나무를 만들었습니다.