目前我有两张桌子说Table-A, Table-B
。我的任务是将行从 Table-A 拖到 Table-B 或将行从 Table-B 拖到自身上。使用TransferHandler
我已经完成了这个任务。但我的问题是,我无法识别从哪个表行被拖到Table-B
.. 即,从表 A 到表 B 或从表 B 到自身。在我exportData
的方法中,TransferHandler
我向其中一列添加了一些额外的数据。基于此,当我通过importData
方法导入数据时,我能够使用我添加数据的特定列从哪个表中找出它。我知道这根本不推荐..所以我需要知道是否有解决这个问题的好方法?
问问题
2192 次
1 回答
5
您可以创建自己的实现,Transferable
该实现将引用源组件。然后,TransferHandler.importData()
您可以将其与TransferSupport.getComponent()
哪个是目标组件进行比较。
例如,这是一个将要传输的字符串的包装器:
public class DataWrapper {
String data;
Object source;
public DataWrapper(String data, Object source) {
super();
this.source = source;
this.data = data;
}
public String getData() {
return data;
}
public Object getSource() {
return source;
}
}
这是一个非常基本的Transferable
实现。
public class DataWrapperTransferable implements Transferable {
public static DataFlavor FLAVOR = new DataFlavor(DataWrapper.class,
"DataWrapper");
private DataFlavor flavors[];
private DataWrapper dataWrapper;
public DataWrapperTransferable(String data, Object source) {
dataWrapper = new DataWrapper(data, source);
flavors = new DataFlavor[] { FLAVOR };
}
@Override
public Object getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException, IOException {
if (flavor.equals(FLAVOR)) {
return dataWrapper;
} else {
throw new UnsupportedFlavorException(flavor);
}
}
@Override
public DataFlavor[] getTransferDataFlavors() {
return flavors;
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return flavor.equals(FLAVOR) || flavor.equals(DataFlavor.stringFlavor);
}
}
然后,在TransferHandler
:
public boolean importData(TransferSupport support) {
DataWrapper dataWrapper = (DataWrapper) support
.getTransferable().getTransferData(
DataWrapperTransferable.FLAVOR);
if (dataWrapper.getSource() == support.getComponent()) {
//the originator and destination are the same
} else {
//drop from another component
}
//rest of the method
}
于 2012-10-26T04:39:30.280 回答