@@ -53,7 +53,7 @@ public static void drop(JComponent jc, Object html5DataTransfer, String name, by
5353 if (target != null ) {
5454 offset = jc .getLocationOnScreen ();
5555// if (name == null)
56- target .drop (JSDnD . createDropEvent (target , t , name , data , x , y ));
56+ target .drop (createDropEvent (target , t , name , data , x , y ));
5757 return ;
5858 }
5959 Component top = jc .getTopLevelAncestor ();
@@ -67,7 +67,32 @@ public static void drop(JComponent jc, Object html5DataTransfer, String name, by
6767 //- offset.y
6868 , t , name , data ));
6969 }
70+
71+ public static void drop (JComponent jc , Object html5DataTransfer , Object [][] data , int x , int y ) {
72+ if (html5DataTransfer == null )
73+ return ;
74+ JSTransferable t = new JSTransferable (html5DataTransfer );
75+ DropTarget target = jc .getDropTarget ();
76+ System .out .println ("JSDnD[] drop for " + jc .getUIClassID () + " target " + target );
77+ Point offset ;
78+ if (target != null ) {
79+ offset = jc .getLocationOnScreen ();
80+ // if (name == null)
81+ target .drop (createDropEvent (target , t , data , x , y ));
82+ return ;
83+ }
84+ Component top = jc .getTopLevelAncestor ();
85+ offset = top .getLocationOnScreen ();
86+
87+ System .out .println ("JSDnD drop for " + jc .getUIClassID () + " offset " + x + " " + y + " -" + offset );
7088
89+ top .dispatchEvent (new JSDropMouseEvent (jc , MouseEvent .MOUSE_RELEASED , x
90+ //- offset.x
91+ , y
92+ //- offset.y
93+ , t , null , null ));
94+ }
95+
7196 @ SuppressWarnings ("serial" )
7297 public static class JSDropMouseEvent extends MouseEvent implements ActiveEvent {
7398
@@ -111,9 +136,9 @@ public void dispatch() {
111136 try {
112137 DropTarget target = ((Component ) getSource ()).getDropTarget ();
113138 if (name == null )
114- target .drop (JSDnD . createDropEvent (target , transferable , null , null , getX (), getY ()));
139+ target .drop (createDropEvent (target , transferable , null , null , getX (), getY ()));
115140 else
116- target .drop (JSDnD . createDropEvent (target , transferable , name , getBData (), getX (), getY ()));
141+ target .drop (createDropEvent (target , transferable , name , getBData (), getX (), getY ()));
117142 } catch (Throwable e ) {
118143 System .out .println ("JSDnD Error creating Drop event " + e );
119144 }
@@ -139,6 +164,12 @@ public String paramString() {
139164
140165 }
141166
167+ static DropTargetDropEvent createDropEvent (DropTarget target , Transferable t , Object [][] data , int x , int y ) {
168+ DropTargetContext context = new DropTargetContext (target );
169+ context .addNotify (new JSDropTargetContextPeer (target , t , data ));
170+ return new DropTargetDropEvent (context , new Point (x , y ), DnDConstants .ACTION_MOVE , DnDConstants .ACTION_LINK | DnDConstants .ACTION_COPY_OR_MOVE );
171+ }
172+
142173 static DropTargetDropEvent createDropEvent (DropTarget target , Transferable t , String name , byte [] data , int x , int y ) {
143174 DropTargetContext context = new DropTargetContext (target );
144175 context .addNotify (new JSDropTargetContextPeer (target , t , name , data ));
@@ -152,6 +183,11 @@ public JSDropTargetContextPeer (DropTarget target, Transferable t, String name,
152183 transferable = (name == null ? t : new FileTransferable (name , data ));
153184 }
154185
186+ public JSDropTargetContextPeer (DropTarget target , Transferable t , Object [][] data ) {
187+ this .target = target ;
188+ transferable = new FileTransferable (data );
189+ }
190+
155191 private Transferable transferable ;
156192 private DropTarget target ;
157193
@@ -274,12 +310,26 @@ private static String fixType(String s) {
274310
275311 static public class FileTransferable extends JSTransferable {
276312
277- private File file ;
313+ private List < File > files ;
278314
279315 public FileTransferable (String name , byte [] data ) {
280316 super (null );
281- file = new File (name );
317+ files = new ArrayList <File >();
318+ addFile (name , data );
319+ }
320+
321+ private void addFile (String name , byte [] data ) {
322+ File file = new File (name );
282323 file .秘bytes = data ;
324+ files .add (file );
325+ }
326+
327+ public FileTransferable (Object [][] data ) {
328+ super (null );
329+ files = new ArrayList <File >();
330+ for (int i = 0 ; i < data .length ; i ++) {
331+ addFile ((String ) data [i ][0 ],(byte []) data [i ][1 ]);
332+ }
283333 }
284334
285335 @ Override
@@ -296,9 +346,9 @@ public boolean isDataFlavorSupported(DataFlavor flavor) {
296346
297347 @ Override
298348 public Object getTransferData (DataFlavor flavor ) throws UnsupportedFlavorException , IOException {
299- List < File > list = new ArrayList < File >() ;
300- list . add ( file ) ;
301- return list ;
349+ Object o = files ;
350+ files = null ;
351+ return o ;
302352 }
303353
304354 }
0 commit comments