package org.pegadi.disposal; import javax.swing.*; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; public class JTableDragHandler extends TransferHandler { private JTable table; private PageTableModel tableModel; private int fromRow = -1; public JTableDragHandler(JTable table) { this.table = table; tableModel = (PageTableModel)table.getModel(); } /* This handler can only be dropped on from itself. Achieves this by checking if this handler itself is currently moving something */ public boolean canImport(TransferSupport info) { return fromRow >= 0; } public int getSourceActions(JComponent c) { return TransferHandler.MOVE; } public boolean importData(TransferSupport info) { JTable.DropLocation dl = (JTable.DropLocation)info.getDropLocation(); int droppedRowIndex = dl.getRow(); return tableModel.movePage(fromRow, droppedRowIndex); } protected void exportDone(JComponent c, Transferable t, int act) { fromRow = -1; } protected Transferable createTransferable(JComponent c) { fromRow = table.getSelectedRow(); return new StringSelection(tableModel.getPage(fromRow).toString()); } }