小さいコンポーネントが積み重なっているコンポーネントで作業しています。ユーザーはドラッグアンドドロップを使用してこれらのコンポーネントの順序を変更できる必要があります。私は、基礎となるデータモデルのローカル参照DataFlavor
(javaJVMLocalObjectMimeType
)を受け入れるTransferHandlerを実装して、この作業を行ってきました。これは正常に動作します。javaDVMLocalObjectMimeTypeをローカルDnDに使用し、外部ドロップのシリアライズ
もう一度アプリケーションを実行して、あるアプリケーションから別のアプリケーションにコンポーネントをドラッグできます。この場合、ドロップアプリケーションでオブジェクトを再構築するために、ドラッグ可能なソースの必要なデータをシリアル化可能なオブジェクトにバンドルし、シリアル化可能なDataFlavorを使用したいと考えています。私は両方の状況でオブジェクトのシリアル化を使用したくない。
オブジェクト参照またはデータのシリアル化バージョンを使用することを決定できるように、ドラッグ操作が同じJVMで行われるかどうかを決定するにはどうすればよいですか。公式のスイングDnDのドキュメントには、ローカルとシリアライゼーションのフレーバーを混在させることができると書かれていますが、これを最大限に活用する方法はわかりません。
編集
はここで、私は私のDataModelTransferable
public static DataFlavor localFlavor;
static {
try {
localFlavor = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType + ";class=\"" + ArrayList.class.getName() + "\"");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
...
@Override
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] { localFlavor };
}
で風味を作成して、私は、これはローカルで正常に動作し、言ったように私のTransferHandler
に、私はこの
@Override
public boolean canImport(TransferSupport support) {
return support.isDataFlavorSupported(DataModelTransferable.localFlavor);
}
を行う方法です私が1つのインスタンスから別のインスタンスにドラッグするとドラッグが受け入れられ、ドクターのjava.io.IOException: Owner failed to convert data
につながりますオペレーションアプリケーションおよびjava.io.NotSerializableException: alignment.model.DataModel
をドラッグソースアプリケーションに追加します。これは問題ありませんが、最初は別のアプリでドラッグを受け入れるべきではありません。
私はArrayList
を使用しています。これは、複数のオブジェクトを一度にドラッグできるようにするためです。
私がjavaJVMLocalObjectMimeTypeを使用しようとしたとき、アプリケーションの2番目のインスタンスに落としたときに私が見たのは、私の 'canImport'で' isDataFlavorSupported'呼び出しが 'true'を返したというものでしたが、' getTransferable.getTransferData' importData'が 'null'を返しました。 – Suma