R
rogerle
Gast
Hallo zusammen !
Ich habe mit folgendem Code das im Titel genannte ermöglicht:
Nun noch mit new TableHandler(table) initialisieren und es funzt.
Was mich nun stört ist, dass wenn ich in eine Zelle klicke diese als erstes selektiert wird
und ich nicht sofort mit dem Drag beginnen kann.
Erst beim 2. Klick in die Zelle klappt es wie gewünscht ?!
Was kann ich tun ??
Danke
Rogerle
Ich habe mit folgendem Code das im Titel genannte ermöglicht:
Code:
public class ObjectTransferable implements Transferable
{
public static final DataFlavor FLAVOR=new DataFlavor(Object.class,"Object");
Object myValue;
public ObjectTransferable(Object value)
{
myValue=value;
}
public DataFlavor[] getTransferDataFlavors()
{
return new DataFlavor[]{FLAVOR};
}
public boolean isDataFlavorSupported(DataFlavor flavor)
{
return flavor==FLAVOR;
}
public Object getTransferData(DataFlavor flavor) throws
UnsupportedFlavorException, IOException
{
if(flavor==FLAVOR) return myValue;
else throw new UnsupportedFlavorException(flavor);
}
}
public class TableHandler extends TransferHandler
{
JTable myTable;
public TableHandler(JTable table)
{
myTable = table;
table.setTransferHandler(this);
table.setDragEnabled(true);
}
public boolean canImport(JComponent comp, DataFlavor[] transferFlavors)
{
if (myTable != comp) return false;
// eventuell DataFlavor noch prüfen
return true;
}
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);
}
}
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);
}
public int getSourceActions(JComponent c)
{
if (myTable == c) return DnDConstants.ACTION_COPY;
else return super.getSourceActions(c);
}
}
Nun noch mit new TableHandler(table) initialisieren und es funzt.
Was mich nun stört ist, dass wenn ich in eine Zelle klicke diese als erstes selektiert wird
und ich nicht sofort mit dem Drag beginnen kann.
Erst beim 2. Klick in die Zelle klappt es wie gewünscht ?!
Was kann ich tun ??
Danke
Rogerle