JList から OS への DND アクションを作成したいと考えています。今のところ私の解決策は、TransferHandler を使用することです。メソッド createTransferable で、コピーしたいファイルで Transferable を作成します。
しかし、ここで問題があります。場合によっては、ファイルをコピーする前に FTP サーバーからファイルをダウンロードする必要があります。非常に負荷の高いダウンロード操作が JavaSwingWorker で実行されます (ステートメント d.download(tmpDir); の後ろに隠されています)。システムは、まだダウンロードされていないファイルをコピーしようとします。
ここで、ファイルをダウンロードした後に転送可能ファイルを作成できるメカニズムが必要です。私の問題の解決策はありますか? 私を助けてください!
ありがとう!
これが私の方法です:
public Transferable createTransferable(JComponent c) {
JList list = (JList) c; // we know it's a JList
List<PictureDecorator> selectedPictures = getSelectedValues(list.getModel());
Vector cpFiles = new Vector();
List<Picture> donePictures = new ArrayList<Picture>();
List<Picture> notDonePictures = new ArrayList<Picture>();
String tmpDir = System.getProperty("java.io.tmpdir");
for(PictureDecorator pd : selectedPictures){
if(pd.getPic().getStatus() == PictureStatus.DONE)
donePictures.add(pd.getPic());
else
notDonePictures.add(pd.getPic());
}
Downloader d = new Downloader(parent, loginInformation, sced, donePictures, order);
d.download(tmpDir);
for(Picture p : donePictures){
cpFiles.add(new File(tmpDir + File.separator + p.getPicture().getName()));
}
for(Picture p : notDonePictures) {
cpFiles.add(p.getPicture());
}
TransferableFile tf = new TransferableFile(cpFiles);
return tf;
}
ドラッグ手順を開始するものが必要です。次に、ドラッグ先のパスを取得し、写真をダウンロードして宛先パスにコピーできます。
編集:または別の定式化:オペレーティングシステムにドロップしたときにドロップ先を見つけるにはどうすればよいですか?