現在、2つのテーブルにTable-A, Table-B
. 私の仕事は、Table-A から Table-B に行をドラッグするか、Table-B からそれ自体に行をドラッグすることです。を使用TransferHandler
して、このタスクを達成しました。しかし、私の問題は、どのテーブル行からTable-B
.. にドラッグされたかを認識できないことです。つまり、テーブル A からテーブル B に、またはテーブル B からそれ自体にドラッグされました。exportData
の方法で、列の 1 つにいくつ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 に答える