我想處理其他應用程序中的File Drops
。 現在我正處於可以區分不同DataFlavors
並接受正確類型的地步。整個JFrame上的TransferHandler
這裏是源代碼,我有工作:
private TransferHandler transferehandler = new TransferHandler(){
@Override
public boolean canImport(TransferHandler.TransferSupport support) {
if (!support.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
return false;
}
boolean copySupported = (MOVE & support.getSourceDropActions()) == MOVE;
if (!copySupported) {
return false;
}
support.setDropAction(MOVE);
return true;
}
這第一部分是建立我canImport,以檢查文件支持MOVE
選項,並檢查它的文件。
@Override
public boolean importData(TransferHandler.TransferSupport support){
if(!canImport(support))
return false;
Transferable t = support.getTransferable();
try {
List<File> l = (List<File>) t.getTransferData(DataFlavor.javaFileListFlavor);
System.out.println(l);
} catch (UnsupportedFlavorException | IOException e) {
e.printStackTrace();
return false;
}
return true;
}
};
這裏是我執行importData
方法。出於測試目的,我正在打印每個文件,這些文件被拖拽到Component
中,該文件有TransferHandler
。
通過閱讀JavaDocs我只有到我可以處理從不同JPanels
滴下的點。 但其實我是想這樣創造的東西:
我希望你明白我的意思。
如何將您的DnD處理程序直接設置爲主頂級容器 - 內容窗格? 'JFramage.getContentPane()' – Antoniossss
你不能直接將它設置爲'Content Pane',但是如果將它添加到JFrame中,只有上面的'bar'變成可丟棄的,實際上我可以將TransfereHandler設置爲每個單獨的Component,但是這將是荒謬的 – Einstein