我已经创建了一个自定义DefaultMutableTreeNode.Now我想执行拖放它正常工作的树,但我想在删除后删除该节点。 但问题是我可以将节点插入到模型中但不能从模型中删除。
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 :(得分: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);
}
}