有没有办法在拖放中达到放下时刻?
我正在制作一个java小程序,通过拖放将文件从网站传输到我的桌面。我可以工作,但是,有什么方法可以学习拖放开始的时间吗?我使用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;
}
}
I am making a java applet that transfer files from website to my desktop with Drag and Drop.I works but,Is there any way to learn when the dropping begins?I'm using MouseListener for listining mouse acts and using my transferhandler class for transfering data.
Code below like this..
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;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我不知道您如何创建
Transferable
,因为它未包含在问题中。在拖放过程中,一旦开始拖动,就会创建Transferable
。但是,无需在Transferable
的构造函数中开始下载。当为特定的
DataFlavor
调用Transferable#getTransferData
方法时,您就可以开始下载,也就是说,除非DropTarget
实现得很糟糕,否则只会调用当发生下降时。I do not know how you create your
Transferable
since it is not included in the question. In the drag-and-drop process theTransferable
is created as soon as you start dragging. However, there is no need to start your download in the constructor of yourTransferable
.You can start downloading when the
Transferable#getTransferData
method is called for the specificDataFlavor
, which is, unless theDropTarget
is badly implemented, only called when the drop has occurred.