2014-09-26 56 views
0

我已经创建了一个自定义的DefaultMutableTreeNode.Now我想执行拖放它正在工作的树很好,但我想要在删除后删除节点。 但事情是我可以插入节点到模型中,但不能从模型中删除。JTree节点没有从DefaultTreeModel中删除

public class ORDnd extends TransferHandler { 

ObjectNode sourceNode; 
ObjectNode destinationParent; 

@Override 
public int getSourceActions(JComponent c) { 
    return MOVE; 
} 

@Override 
protected Transferable createTransferable(JComponent source) { 
    return new TransferableNode((ObjectNode) ((JTree) source).getSelectionPath().getLastPathComponent(), DataFlavors.ORDataFlavor); 
} 

@Override 
public boolean canImport(TransferHandler.TransferSupport support) { 
    if (!support.isDrop()) { 
     return false; 
    } 
    try { 
     if (support.isDataFlavorSupported(DataFlavors.ORDataFlavor)) { 
      sourceNode = (ObjectNode) support.getTransferable().getTransferData(DataFlavors.ORDataFlavor); 
     } else { 
      return false; 
     } 

    } catch (UnsupportedFlavorException | IOException ex) { 
     Logger.getLogger(ReusableDnd.class.getName()).log(Level.SEVERE, null, ex); 
    } 

    JTree.DropLocation dropLocation = (JTree.DropLocation) support.getDropLocation(); 
    TreePath path = dropLocation.getPath(); 
    if (path == null) { 
     return false; 
    } 
    destinationParent = (ObjectNode) path.getLastPathComponent(); 
    return (destinationParent.isRoot() && sourceNode.isPage()) || (destinationParent.isPage() && sourceNode.isObject()); 
} 

@Override 
public boolean importData(TransferHandler.TransferSupport support) { 
    if (!canImport(support)) { 
     return false; 
    } 
     JTree tree = (JTree) support.getComponent(); 
     DefaultTreeModel model = (DefaultTreeModel) tree.getModel(); 
     if (destinationParent.getNode(sourceNode.getText()) == null) { 

     /** if (support.getSourceDropActions() == MOVE) { 
       model.removeNodeFromParent(sourceNode);//Not removing the node from the model 
      } **/ 

      if (support.isDrop() && support.getDropAction() == MOVE) 
      { 
      model.removeNodeFromParent(sourceNode);//Working bcoz changed getSourceDropActions to getDropAction 
      } 
      model.insertNodeInto(sourceNode, destinationParent, destinationParent.getChildCount());//this is working fine 
      model.reload(sourceNode); 
     return true; 
     } 

    return false; 
} 
} 

回答

0

的事情是我忘了补充exportDone.Now它正在完美

@Override 
protected void exportDone(JComponent source, Transferable data, int action) { 
    if (action != MOVE) { 
     return; 
    } 
    DefaultTreeModel model = (DefaultTreeModel) ((JTree) source).getModel(); 
    try { 
     model.removeNodeFromParent((ObjectNode) data.getTransferData(DataFlavors.ORDataFlavor)); 
    } catch (UnsupportedFlavorException | IOException ex) { 
     Logger.getLogger(ORDnd.class.getName()).log(Level.SEVERE, null, ex); 
    } 

}