2012-06-14 17 views
5

私はクリップボードにファイルをコピーするJava Swingアプリケーションでこのコードを使用しています:Javaでクリップボードにファイルをカットする方法は?

final List<File> files = new ArrayList<File>(); 
// ... code to fill list omitted ... // 

Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
    new Transferable() { 
     @Override 
     public DataFlavor[] getTransferDataFlavors() { 
      return new DataFlavor[] { DataFlavor.javaFileListFlavor }; 
     } 

     @Override 
     public boolean isDataFlavorSupported(DataFlavor flavor) { 
      return DataFlavor.javaFileListFlavor.equals(flavor); 
     } 

     @Override 
     public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { 
      return files; 
     } 
    }, null 
); 

それは動作しますが、その中で私は、WindowsエクスプローラとCtrl + Vに行くことができるとファイルがアップターン(うまくいけば、それは動作します他のOSでは、テストされていませんが)。私はのカットも実装したいと思いますが、私はシステムにそれが何であるかを知らせる方法がわかりません。または、代わりに、元の場所から削除できるように、コピーされた各ファイルのフィードバックを得る方法手動で

これが不可能でない場合は、これをどのように処理すべきかに関する提案はありますか?アプリケーション内で&のペーストをカットすることもできます(別にOSエクスプローラとファイルを交換する)。

+0

を参照してください。 – rjdkolb

+0

あのコードはKubuntu linux(KDE)でうまくいきますが、ユーザーがファイルをペーストする前にJavaプログラムを終了してはいけないという点が異なります。詳細はこちらhttp://en.wikipedia.org/wiki/X_Window_selection – rjdkolb

答えて

0

の人がファイルをカットする可能性の欠如を議論する別のポストがあります:

Cutting files into the clipboard with SWT

は、あなたが本当にそれを必要とする場合は、醜いの道を行くことができるし、これを行う方法があるかどうかを確認JNIコールを介して、しかしあなたはそれをサポートしたいすべてのプラットフォームのためにする必要があります...

0

これは "多少スイングを使用して"可能です。 TransferHandler.exportToClipboard()を参照してください。それは行動を提供する。 exportToClipboard()を使用する適切な方法は、TransferHandler.getCutAction()を呼び出し、新しく作成されたActionEvent()を使用してactionPerformed()を呼び出すことです - JComponentをTransferHandlerで割り当てて、Transferableをクリップボードに入れる。

しかし、逆のことはできません。クリップボードからのインポートでは、クリップボードにコピーされたかどうかを知る方法がありません。 TransferHandler.TransferSupport.getDropAction()はDND操作でのみ機能します。

ただし、転送が完了した後にファイルを削除することは、クリップボードの所有者の責任です。 TransferHandler.exportDone()

を参照してください。また、私はカットはまだJavaで可能だとは思わないバグhttp://bugs.java.com/bugdatabase/view_bug.do?bug_id=6673481

+0

実際には、Windows APIからSetClipboardDataを見ると、カットまたはコピーアクションを割り当てることはできません。私はWindowsエクスプローラがこの情報を置くために別のグローバルエリアを使うと確信しています。 –

+0

これをどうやって使うのか分かりません。私はすでにすべてのTransferHandlerのものを使用していますが、 'TransferHandler.exportToClipboard'は実際には' action'パラメータを使用して、何か異なることをするわけではありません。 – Boann

+0

これは、アクションを使用してexportDone()を呼び出すだけです。あなたの権利、それは助けにはならない。私は、クリップボードが実際にアクションを保存していないので(Windowsで見る限り)、Javaがそれを行うことはできないと思います。 –

関連する問題