2013-05-02 15 views
5

Benim Java 7 Salıncak uygulaması aşağıdaki nesneleri içeren bir JTable özellikleri:Java: JTable'dan yerel dosya sistemine nasıl dosya sürükleyebilirim?

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 ... 

} 

amacım uygulamanın dışına bu Dosyam nesneleri sürükleyip (masaüstüne örneğin) dosya sistemine bırakmaktır. JTable'ım için setDragEnabled (true) ayarlandığında, tablo, diğer uygulamalardan düzenli olarak sürüklenen & sürükleme eylemleri tarafından bilinen bir tablo girdisini sürüklerken bir "+" sembolüne dönüşür. Ama aslında masaüstü hiçbir şey nesne bırakarak

nasıl sadece Dosyam nesnesinin içinde Dosya nesne damla benim JTable söyleyebilir ... olur? Daha fazla şey unuttum mu?

Birisi kısa bir örnek verebilir mi?

Yardımlarınız için şimdiden teşekkür ederiz!

cevap

3

aşağıdaki özelliklere sahip masanızı yapılandırın:

İşte FileTransferable uygulaması var
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; 
    } 
} 

:

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

İşte TransferHandler uygulaması var

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

Sen oluşturulan TransferableDataFlavor#javaFileListFlavor içerir ve bu lezzet için veriler MyFile örneğin içerdiği File olduğunu (daha doğrusu emin olmalısınız: o lezzet javadoc açıklandığı gibi, File ile List).

Bu, JTable numaralı ürününüzde muhtemelen bir TransferHandler özelliğine ihtiyaç duyacaktır.

+0

ben şüphe değilim ... Belki de Dosya XxxTableModel – mKorbel

+0

içinde saklanan durumunda bazı mor verebilir misiniz e bilgi, kısa bir how-to ve hatta bir örnek :-)? – salocinx