Salut à tous,
dans mon appli. je drag depuis une liste dans un JPanel. J'utilise java.awt.dnd
Une fois droppé, l'image de ma liste est clonée et tapée dans le JPanel. Lorsque right click sur l'image, menu popup s'affiche et on peut voir les proprietes. Lorsque on clique sur les proprietes, une fenetre de dialogue s'ouvre.
Les images dans cette liste sont en fait des objets differents qui heritent tous de la classe Materiel. Chacun de ces objets (classe differentes heritant de Materiel) ont donc leur fenetre de dialogue a eux.
Une de ces classes filles s'appelle : Rita , herite de Materiel. Cette classe a donc une JDialog nommée : RitaDialog. Dans cette JDialog il y a une JComboBox. Celle ci est remplie par SQL requetes.
Je construis la ComboBox par :
JComboBox brol = new JComboBox (SQLRequetes.getTypeStation());
Cette methode statique retourne un Vector.
Là vient le probleme:
Si je retourne un Vector<String> aucun probleme tout expliqué ci dessus fonctionne.
Si par contre je construit le vecteur avec <TypeStation> , le drop sur le JPanel ne fonctionne plus. Et donc je drag de la liste vers le Jpanel et l'image n'est pas clonée, n apparait pas sur le tableau, etc etc ...
Le probleme se passe à ce niveau exactement, dans la classe Tableau qui extends JPanel et est donc l'endroit où sont droppés les objets depuis la liste:
Donc, comme le dit le commentaire dans le code, l'exception se lance et me met une erreur en rapport avec TypeStation ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 public void drop(DropTargetDropEvent e) { if (e.isDataFlavorSupported(Materiel.materielDataFlavor)) { e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); } else { e.rejectDrop(); return; } Transferable t = e.getTransferable(); try { /* C EST ICI QUE CA PLANTE ... LE TRY NE MARCHE PAS, ET SI J' AFFICHE LE MESSAGE DE L'EXCEPTION CA M AFFICHE: simulator.divers.TypeStation */ droppedMateriel = (Materiel) t.getTransferData(Materiel.materielDataFlavor); droppedPoint = e.getLocation(); } catch (Exception ex) { e.dropComplete(false); return; } e.dropComplete(true); source.stateChanged(); }
Donc de ce fait, dropComplete est mit a false et donc il drop pas et donc rien ne va.
Pourtant ca passe l'étape :
J'avoue ne pas voir du tout le probleme, en gros la ligne qui foire c est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (e.isDataFlavorSupported(Materiel.materielDataFlavor))
Materiel implements Transferable , donc :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 droppedMateriel = (Materiel) t.getTransferData(Materiel.materielDataFlavor);
Je pense que ceci est correct ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException { if (flavor.equals(materielDataFlavor)) { return this; } else throw new UnsupportedFlavorException(flavor); } public boolean isDataFlavorSupported(DataFlavor flavor) { return (flavor.equals(materielDataFlavor)); } public DataFlavor[] getTransferDataFlavors() { return (DataFlavor[]) supportedFlavors.clone(); }
Voilà , si quelqu un a une idée, merci de m'aiguiller car là je patauge.
Bien à vous mes chers.
Partager