2013-05-02 23 views
5

我的Java 7中Swing應用程序擁有的JTable包含以下對象:Java:如何將文件從JTable拖動到本機文件系統?

public class MyFile { 

    private long id; 
    private long created; 
    private long modified; 
    private String description; 
    private File file; 

    public MyFile(long id) { 
     this.id = id; 
     this.created = System.currentTimeMillis(); 
    } 

    // getter & setter methods ... 

} 

的目標是拖動這些MyFile的對象了我的申請,並將其拖放到文件系統(例如桌面)。將setDragEnabled(true)設置爲我的JTable時,拖動表條目時該圖標已轉爲「+」符號,如從其他應用程序的常規拖動操作中所知的那樣。但實際上下降的對象到桌面時,沒有任何反應...

我怎麼能告訴我的JTable只降MyFile的對象內部文件對象?我忘了更多的東西嗎?

有人可以提供一個簡短的樣本?

非常感謝您的幫助提前!

回答

3

具有以下屬性配置表:

tblDocuments.setDragEnabled(true); 
tblDocuments.setTransferHandler(new FileTransferHandler()); 

下面是執行的TransferHandler:

public class FileTransferHandler extends TransferHandler { 

    @Override 
    protected Transferable createTransferable(JComponent c) { 
     List<File> files = new ArrayList<File>(); 
     // copy your files from the component to a concrete List<File> files ... 
     // the following code would be a sample for a JList filled with java.io.File(s) ... 
     /*JList list = (JList) c; 
     for (Object obj: list.getSelectedValues()) { 
      files.add((File)obj); 
     }*/ 
     return new FileTransferable(files); 
    } 

    @Override 
    public int getSourceActions(JComponent c) { 
     return MOVE; 
    } 
} 

這裏的FileTransferable實現:

public class FileTransferable implements Transferable { 

    private List<File> files; 

    public FileTransferable(List<File> files) { 
     this.files = files; 
    } 

    public DataFlavor[] getTransferDataFlavors() { 
     return new DataFlavor[]{DataFlavor.javaFileListFlavor}; 
    } 

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

    public Object getTransferData(DataFlavor flavor) 
      throws UnsupportedFlavorException, IOException { 
     if (!isDataFlavorSupported(flavor)) { 
      throw new UnsupportedFlavorException(flavor); 
     } 
     return files; 
    } 
} 
4

您必須確保創建Transferable包含DataFlavor#javaFileListFlavor,並且對於味道的數據是包含在你的MyFile實例File(更精確地說:一個ListFile,因爲在那個味道的Javadoc解釋)。

這可能需要您的JTable上的自定義TransferHandler

+0

我懷疑...也許在這種情況下,文件不存儲在XxxTableModel – mKorbel 2013-05-02 08:45:01

+0

你能提供一些莫電子信息,簡短的操作方法甚至樣本:-)? – salocinx 2013-05-08 10:29:13

相關問題