2016-11-03 5 views
0

DataFlavorsのプリペイドが正しく理解されているかどうかはわかりませんが、実際にJComponentのDataFlavorをどのように設定できますか? 私は出力がこれですgetDataFlavorメソッドを呼び出すたびに:コンポーネントのDataFlavorを設定するには?

java.awt.datatransfer.DataFlavor[mimetype=application/x-java-file-list;representationclass=java.util.List] 

は私の問題は、私は右の私のJPanelにデスクトップまたは他の場所から画像をドラッグしたいということ、です。 DataFlavor.javaFileListFlavorを使って作業していますが、PNGやJPGファイルしか受け付けないカスタムフレーバを作成する方法はありませんか? (実際にカスタムフレーバーを作成することは可能ですが、コンポーネントに新しいフレーバーを "有効"にする手がかりがないことがわかります)

または、アイテム内でドラッグされているかどうかを確認する方法はありますかjavaFileListFlavorを使ってPNGまたはJPG?

私は(私は、この言語のマスターではないんだけど、私は自分のベストをしようとしている;)私は私の質問には十分説明できることを願っています)

+0

にJDK8を使用して私の作品罰金? –

+0

私はPC atmにいませんが、私はTransferHandlerを継承し、canImport(...)メソッドとimportData(...)メソッドをオーバーライドするクラスを持っています。 canImportは1つのライナーであり、trueを返します(私は転送されたデータを取得する方法を知らないので)、importData関数はTransferableを取得し、dataFlavorを通じてFileのリストを作成することができました。ドロップが成功した場合はインデックス0のMy Image。その後、私のパネルのsetTransferHandler()メソッドを使ってtransferHandlerを追加しています –

答えて

1

かどうかを確実にする方法がありますItemでドラッグされたものは、javaFileListFlavorを持つPNGまたはJPGですか?

Top Level DropのSwingチュートリアルをご覧ください。デスクトップからJTextAreaにファイルをドラッグする方法を示します。

TransferHandlercanImport(...)importData(...)の方法を見てください。 canImport(...)メソッドは現在、あなたがFileListFlavorを持っているかどうかだけチェックします。したがって、実際のFileがPNGまたはJPGであることを確認するために余分なロジックを追加する必要があります。

importData(...)メソッドを見ると、上記のチェックを実装できるように、TransferSupportオブジェクトからFileオブジェクトを取得する方法がわかります。

編集:

が、例外を説明するように、私はちょうど例外を無視

をポップアップ表示されます。ここでは、 ".java"ファイルのみをテキスト領域にコピーすることができるチュートリアルの修正されたコードを示します。

private TransferHandler handler = new TransferHandler() { 
    public boolean canImport(TransferHandler.TransferSupport support) { 
     if (!support.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { 
      return false; 
     } 

     Transferable t = support.getTransferable(); 

     try 
     { 
      java.util.List<File> l = (java.util.List<File>)t.getTransferData(DataFlavor.javaFileListFlavor); 
      File file = l.get(0); 
      String fileName = file.getName(); 

      if (!file.getName().endsWith(".java")) 
       return false; 
     } 
     catch (Exception e) 
     { 
      // ignore 
     } 

     if (copyItem.isSelected()) { 
      boolean copySupported = (COPY & support.getSourceDropActions()) == COPY; 

      if (!copySupported) { 
       return false; 
      } 

      support.setDropAction(COPY); 
     } 

     return true; 
    } 

どのようにして、コンポーネントのTransferHandlerのを処理しているWinodow 7

+0

TransferSupportのTransferableを取得する必要があり、これを行うとInvalidDnDOperationExceptionを引き起こすか、または午前中にTransferSupportオブジェクトからFileオブジェクトを取得できません私は間違っている? –

+0

"canImport(...)メソッドは現在、あなたがFileListFlavorを持っているかどうかだけチェックします"。あなたはそれを変更するためのアイデアはありますか?私はしばらくの間googledしかし、私は適切な解決策を見つけることができませんでした。 –

+0

@SaliKe、または間違っていますか? - 私は分かりません。試してみて、何が起こるか見てみましょう。 – camickr

関連する問題