1

現在、2つのテーブルにTable-A, Table-B. 私の仕事は、Table-A から Table-B に行をドラッグするか、Table-B からそれ自体に行をドラッグすることです。を使用TransferHandlerして、このタスクを達成しました。しかし、私の問題は、どのテーブル行からTable-B.. にドラッグされたかを認識できないことです。つまり、テーブル A からテーブル B に、またはテーブル B からそれ自体にドラッグされました。exportDataの方法で、列の 1 つにいくつTransferHandlerかの追加データを追加しています。これに基づいて、メソッドを使用してデータをインポートすると、importDataデータを追加した特定の列を使用して、どのテーブルからデータを取得したかを把握できます。私はこれがまったく推奨されていないことを知っています..この問題にアプローチする良い方法があるかどうかを知る必要がありますか?

4

1 に答える 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 に答える