@Override public boolean importData(TransferHandler.TransferSupport info) { JTable target = (JTable) info.getComponent(); JTable.DropLocation dl = (JTable.DropLocation) info.getDropLocation(); int rowTo = dl.getRow(); int max = table.getModel().getRowCount(); if ((rowTo < 0) || (rowTo > max)) { rowTo = max; } target.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); try { Integer rowFrom = (Integer) info.getTransferable().getTransferData(localObjectFlavor); if (rowTo > rowFrom) { rowTo--; } if ((rowFrom != -1) && (rowFrom != rowTo)) { StateTableModel stateTableModel = (StateTableModel) table.getModel(); stateTableModel.reorder(rowFrom, rowTo); target.getSelectionModel().addSelectionInterval(rowTo, rowTo); return true; } } catch (Exception e) { e.printStackTrace(); } return false; }
@Override public boolean canImport(TransferHandler.TransferSupport info) { boolean b = (info.getComponent() == table) && info.isDrop() && info.isDataFlavorSupported(localObjectFlavor); table.setCursor(b ? DragSource.DefaultMoveDrop : DragSource.DefaultMoveNoDrop); return b; }
@Override public boolean importData(TransferHandler.TransferSupport th) { Transferable tr = th.getTransferable(); Component cp = th.getComponent(); if (tr.isDataFlavorSupported(MyTransferable.data)) { if (cp instanceof JTree) { JTree tree = (JTree) cp; JTree.DropLocation location = tree.getDropLocation(); TreePath path = location.getPath(); int index = location.getChildIndex(); if (index == -1) { index = 0; } // System.out.println(index); DefaultMutableTreeNode node; try { node = (DefaultMutableTreeNode) tr.getTransferData(MyTransferable.data); DefaultMutableTreeNode parent = (DefaultMutableTreeNode) path.getLastPathComponent(); // vérifie si on ne drop pas dans un noeud fils if (node.isNodeChild(parent)) { return false; } Controleur controleur = Controleur.getInstance(); controleur.deplacerElement(node, parent, index); DefaultTreeModel model = (DefaultTreeModel) tree.getModel(); model.removeNodeFromParent(node); // vérifie si on est plus hors index lors d'une réorganisation par ex if (index > parent.getChildCount()) { index = parent.getChildCount(); } model.insertNodeInto(node, parent, index); // controleur.ajoutElement(node, parent, index); TreePath newPath = path.pathByAddingChild(node); tree.makeVisible(newPath); tree.scrollRectToVisible(tree.getPathBounds(newPath)); } catch (Exception e) { e.printStackTrace(); } return true; } } return false; }