GitLab repository
model
com.example.dnd.model.Doctor
Serializable
firstName
lastName
number
Doctor
TableView
JTable
GIF of example in action
DataFormat
application/x-my-mime-type; class=com.example.dnd.model.Doctor
class=
JAVA_DATAFLAVOR:
JAVA_DATAFLAVOR:application/x-my-mime-type; class=com.example.dnd.model.Doctor
onDragDetected
DataFormat format = new DataForamt(
"JAVA_DATAFLAVOR:application/x-my-mime-type; class=com.example.dnd.model.Doctor",
"application/x-my-mime-type; class=com.example.dnd.model.Doctor"
);
JAVA_DATAFLAVOR
static final
onDragXXX
Oracle Tutorials
import com.example.dnd.model.Doctor;
import java.awt.datatransfer.Transferable;
import java.util.ArrayList;
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.TransferHandler;
public class DoctorTransferHandler extends TransferHandler {
@Override
public boolean canImport(TransferSupport support) {
return support.isDrop() && support.isDataFlavorSupported(DoctorTransferable.DOCTOR_FLAVOR);
}
@Override
public boolean importData(TransferSupport support) {
if (!canImport(support)) {
return false;
}
JTable table = (JTable) support.getComponent();
DoctorTableModel model = (DoctorTableModel) table.getModel();
try {
Transferable transferable = support.getTransferable();
ArrayList<Doctor> list =
(ArrayList<Doctor>) transferable.getTransferData(DoctorTransferable.DOCTOR_FLAVOR);
model.addAll(list);
return true;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
@Override
public int getSourceActions(JComponent c) {
return COPY_OR_MOVE;
}
@Override
protected Transferable createTransferable(JComponent c) {
JTable table = (JTable) c;
DoctorTableModel model = (DoctorTableModel) table.getModel();
return new DoctorTransferable(model.getAll(table.getSelectedRows()));
}
@Override
protected void exportDone(JComponent source, Transferable data, int action) {
if (action == MOVE) {
JTable table = (JTable) source;
DoctorTableModel model = (DoctorTableModel) table.getModel();
model.removeAll(model.getAll(table.getSelectedRows()));
}
}
import com.example.dnd.model.Doctor;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
public class DoctorTransferable implements Transferable {
public static final DataFlavor DOCTOR_FLAVOR;
static {
try {
DOCTOR_FLAVOR = new DataFlavor("application/x-my-mime-type; class=java.util.ArrayList");
} catch (ClassNotFoundException ex) {
throw new RuntimeException(ex);
}
}
private final ArrayList<Doctor> doctors;
public DoctorTransferable(Collection<? extends Doctor> doctors) {
this.doctors = new ArrayList<>(doctors);
}
@Override
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[]{DOCTOR_FLAVOR};
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return DOCTOR_FLAVOR.equals(flavor);
}
@Override
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
if (DOCTOR_FLAVOR.equals(flavor)) {
return doctors;
}
throw new UnsupportedFlavorException(flavor);
}
}
TransferHandler#createTranserfable
canImport
importData
exportDone
TableCell