コンポーネントを jtree にドラッグしようとしています。
いくつかのケースの例では機能しません:
根
A 葉です B A の子です
Bの子のように挿入しようとすると、ルートの子のように挿入されます public class TreeTransferHandler extends TransferHandler {
JTree tree;
DataFlavor nodesFlavor;
DataFlavor[] flavors = new DataFlavor[1];
DefaultMutableTreeNode[] nodesToRemove;
String mimeType = DataFlavor.javaJVMLocalObjectMimeType + ";class=" + CommandBeans.class.getName();
DataFlavor dataFlavor = new DataFlavor(mimeType, "command");
public TreeTransferHandler(JTree tree) {
this.tree = tree;
}
public TreeTransferHandler() {
}
@Override
public boolean canImport(TransferHandler.TransferSupport info) {
if (!info.isDataFlavorSupported(dataFlavor)) {
return false;
}
return true;
}
@Override
public int getSourceActions(JComponent c) {
//Nous n'autorisons donc que la copie ici
return COPY;
}
@Override
public boolean importData(TransferHandler.TransferSupport support) {
if (!canImport(support)) {
return false;
}
JTree.DropLocation dl = (JTree.DropLocation) support.getDropLocation();
TreePath path = dl.getPath();
int index = dl.getChildIndex();
CommandBeans command = null;
Transferable data = support.getTransferable();
try {
command = (CommandBeans) data.getTransferData(dataFlavor);
} catch (UnsupportedFlavorException ex) {
Logger.getLogger(TreeTransferHandler.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(TreeTransferHandler.class.getName()).log(Level.SEVERE, null, ex);
}
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(command.getName());
DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) path.getLastPathComponent();
DefaultTreeModel model = (DefaultTreeModel) this.tree.getModel();
index = (index == -1) ? model.getChildCount(path.getLastPathComponent()) : index;
model.insertNodeInto(newNode, parentNode, index);
tree.makeVisible(path.pathByAddingChild(newNode));
tree.scrollPathToVisible(path);
return true;
}
}
場所を落としたり挿入したりするのは苦手です。
バグがあるようです: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6560955#
なにか提案を?