Toon posts:

[Java] image bij Drag ( DnD)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hi,

Drag and Drop (DnD) heb ik werkend. Echter de weergave tijdens een Drag bevalt mij niet. Ik heb een ToolBar en een Pane. Vanaf de ToolBar worden verschillende symbolen naar een Pane gesleept.
De ToolBar bestaat uit extended JLabel's die dus dragable zijn.

Tijdens een Drag veranderd de muiscursor in een Copy cursur (vergelijkbaar als je in MS Verkenner, bestanden van directory a naar directory b sleept).
Omdat ik te maken heb met symbolen is het handig een figuur bij het Draggen te zien. Bijvoorkeur een gif bestand.

Heeft iemand hier ervaring mee? In mijn DragGestructureListener inner-klasse staat nu de volgende code:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
   public void dragGestureRecognized(DragGestureEvent e) {

      // Controleren of de gewenste actie wel geoorloofd is.
      if((e.getDragAction() & DnDAction) == 0)
        return;

      // Aangeven wat er transferable is.
      TaskCell taskCell = new TaskCell("Task");
      ConnectionSet cs = new ConnectionSet();
      Map attributes = new Hashtable();
      // Bounds zijn 0,0 zodat drop wordt uitgevoerd op plek van cursor
      attributes.put(taskCell, createBounds(0,0, Color.black));
      // Een port voor verbindingen aanmaken.
      taskCell.add(new DefaultPort("Taak/Center"));

      // De in te voegen cellen
      Object[] cells = new Object[] {taskCell};
      Rectangle bounds = new Rectangle(new Dimension(0,0));
      // Trasferable initialiseren
      Transferable transferable = new GraphTransferable(cells, cs, attributes, bounds);

      // Drag gedrag
      try {
         dragImage = createImage(20,20); //@todo nog doen
         dragImage.getGraphics();

         if (DragSource.isDragImageSupported()){
           // cursor, image, point, transferrable, dsource listener
           System.out.println("Supported"); // Niet bij (sommige?) Win32 platformen.
           e.startDrag(DragSource.DefaultCopyDrop, dragImage, imageOffset,
                       transferable, dsListener);
         }
         else dragSource.startDrag(e, DragSource.DefaultCopyDrop, transferable, dsListener);

      } catch( InvalidDnDOperationException idoe ) {
        // Niets doen
      }
    }
  }


Heeft iemand mijn wensen al eens voor elkaar gekregen? Of gaat dit niet werken onder Windows clients? Sourcode is altijd welkom! :)

Verwijderd

Topicstarter
Nog even voor de duidelijkheid:
Java:
1
2
e.startDrag(DragSource.DefaultCopyDrop, dragImage, imageOffset, 
                       transferable, dsListener); 

Daar wordt een dragImage aan startDrag methode doorgegeven. Zo zou het volgens mij moeten gaan werken. Ik vraag mij dus af of iemand hier een goede invulling voor heeft om inderdaad een .gif bestand te gebruiken bij het draggen?

Verwijderd

Topicstarter
Ik heb iets gelezen dat het eventueel met een glasspane zou kunnen. Hier iemand ervaring mee?