1

コンポーネントを 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#

なにか提案を?

4

0 に答える 0