Hallo Forum,
ich möchte in meiner JTable Drag & Drop für Zeilen implementieren, so wie es bei den Spalten auch möglich ist.
Dabei verwende ich code, der teilweise funktioniert.
Leider habe ich noch 2 Probleme:
1. Beim Verschieben der gewählten Zeile wird die Zielzeile einfach überschrieben und nicht verschoben. Die Zielzeile ist einfach weg.
2. Ich kann in meiner Zeile immer nur eine Zelle verschieben, und nicht die ganze Zeile.
Ich verwende folgenden code:
Vielleicht kann mir ja jemand bei der Lösung meines Problems helfen. Danke
ich möchte in meiner JTable Drag & Drop für Zeilen implementieren, so wie es bei den Spalten auch möglich ist.
Dabei verwende ich code, der teilweise funktioniert.
Leider habe ich noch 2 Probleme:
1. Beim Verschieben der gewählten Zeile wird die Zielzeile einfach überschrieben und nicht verschoben. Die Zielzeile ist einfach weg.
2. Ich kann in meiner Zeile immer nur eine Zelle verschieben, und nicht die ganze Zeile.
Ich verwende folgenden code:
Code:
public class TableHandler extends TransferHandler {
JTable myTable;
public TableHandler(JTable table) {
myTable = table;
table.setTransferHandler(this);
table.setDragEnabled(true);
}
@Override
public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
if (myTable != comp) {
return false;
// eventuell DataFlavor noch prüfen
}
return true;
}
@Override
protected Transferable createTransferable(JComponent c) {
if (c == myTable) {
int row = myTable.getSelectedRow();
int col = myTable.getSelectedColumn();
Object value = myTable.getModel().getValueAt(row, col);
// Hier ein entsprechendes Transferable benutzen
return new ObjectTransferable(value);
} else {
return super.createTransferable(c);
}
}
@Override
public boolean importData(JComponent comp, Transferable t) {
if (comp == myTable) {
try {
Object value = t.getTransferData(ObjectTransferable.FLAVOR);
int row = myTable.getSelectedRow();
int col = myTable.getSelectedColumn();
myTable.getModel().setValueAt(value, row, col);
return true;
} catch (Exception e) {
}
}
return super.importData(comp, t);
}
@Override
public int getSourceActions(JComponent c) {
if (myTable == c) {
return DnDConstants.ACTION_MOVE;
} else {
return super.getSourceActions(c);
}
}
}
Code:
public class ObjectTransferable implements Transferable {
public static final DataFlavor FLAVOR = new DataFlavor(Object.class, "Object");
Object myValue;
public ObjectTransferable(Object value) {
myValue = value;
}
@Override
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[]{FLAVOR};
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return flavor == FLAVOR;
}
@Override
public Object getTransferData(DataFlavor flavor) throws
UnsupportedFlavorException, IOException {
if (flavor == FLAVOR) {
return myValue;
} else {
throw new UnsupportedFlavorException(flavor);
}
}
}
Vielleicht kann mir ja jemand bei der Lösung meines Problems helfen. Danke