有什么方法可以达到拖放的下降时刻吗?

时间:2012-02-03 12:29:09

标签: java swing drag-and-drop applet

我正在创建一个java applet,使用Drag and Drop将文件从网站传输到我的桌面。我可以工作但是,有什么方法可以学习何时开始删除?我正在使用MouseListener来列出鼠标行为并使用我的transferhandler转移数据的课程。

下面的代码就像这样..

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 个答案:

答案 0 :(得分:1)

我不知道您如何创建Transferable,因为它未包含在问题中。在拖放过程中,只要您开始拖动,就会创建Transferable。但是,您无需在Transferable的构造函数中开始下载。

您可以在为特定Transferable#getTransferData调用DataFlavor方法时开始下载,除非DropTarget执行得很糟糕,只有在丢弃时才会调用。