Есть ли способ перетаскивания в Drag and Drop? - PullRequest
2 голосов
/ 03 февраля 2012

Я делаю java-апплет, который переносит файлы с веб-сайта на мой рабочий стол с помощью перетаскивания. Я работаю, но есть ли способ узнать, когда начинается отбрасывание?класс для передачи данных.

Код ниже, как этот ..

public class DragApplet extends JApplet
{       
    public void init()
    {       
        Container contentPane = getContentPane();

        Image image = ...;
        JLabel label = new JLabel(new ImageIcon(image));
        label.setTransferHandler(new ImageSelection());

        MouseListener listener = new MouseAdapter() 
        {
            public void mousePressed(MouseEvent me) {

                    JComponent comp = (JComponent) me.getSource();
                    TransferHandler handler = comp.getTransferHandler();
                    handler.exportAsDrag(comp, me, TransferHandler.COPY);
            }
        }       
        label.addMouseListener(listener);
        contentPane.add(label,BorderLayout.CENTER);
    }
}

class ImageSelection extends TransferHandler implements Transferable 
{
    private static final DataFlavor flavors[] = { DataFlavor.javaFileListFlavor };

    public ImageSelection(){ // bla bla.. }

    public int getSourceActions(JComponent c) {
        // bla bla..
        return TransferHandler.COPY;
    }     

    public Transferable createTransferable(JComponent comp) {
        // bla bla..
        return this;
    }

    public DataFlavor[] getTransferDataFlavors() {
        // bla bla..      
        return flavors;
    }

    public boolean canImport(JComponent comp, DataFlavor flavor[]) {
        // bla bla..
        return true;
    }    

    public Object getTransferData(DataFlavor flavor){   
        //Download starts and save "C:\\Temp\\aa.mpg" here..
        String[] ary= {"C:\\Temp\\aa.mpg\\"};           
        return Arrays.asList(ary);              
    }     

    public boolean importData(JComponent comp, Transferable t) {
        // bla bla..
        return false;
    }    

    public boolean isDataFlavorSupported(DataFlavor flavor) {
        // bla bla..
        return true;
    }
}

1 Ответ

1 голос
/ 03 февраля 2012

Я не знаю, как вы создаете Transferable, так как он не включен в вопрос.В процессе перетаскивания Transferable создается, как только вы начинаете перетаскивание.Однако нет необходимости начинать загрузку в конструкторе Transferable.

. Вы можете начать загрузку, когда для конкретного DataFlavor вызывается метод Transferable#getTransferData, то есть, если только DropTarget плохо реализован, вызывается только после сброса.

...