我创建了一个自定义 DefaultMutableTreeNode。现在我想在树上执行拖放操作,它工作正常,但我想在被删除后删除节点。但问题是我可以将节点插入模型但不能从模型中删除。
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;
}
}