ok sa marche on peut passer à la prochaine phase comme je te l'ai expliqué. merci et j’attends tes instructions.
Version imprimable
ok sa marche on peut passer à la prochaine phase comme je te l'ai expliqué. merci et j’attends tes instructions.
Le drag 'n drop que tu as programmé semble fonctionner
car une image apparaît à l'endroit où tu largues le composant.
Cette image est dessinée par :
Si l'application s’arrêtait là, on aurait pu s'en contenter.Code:
1
2
3
4
5
6
7
8 public void paintComponent(Graphics g){ super.paintComponent(g); for(Iterator<Composant> it=liste.iterator();it.hasNext();) { Composant ce=(Composant)it.next(); g.drawImage(ce.image,ce.x,ce.y,ce.longueur,ce.largeur,null); } }
Mais voilà : Il faut qu'on puisse déplacer ce composant.
Et là, ça ne marchera pas car c'est très très compliqué de cliquer sur l'image dessinée et la déplacer.
Comment faire simple ?
Au lieu de peindre une image, il faut placer un vrai composant dans la DropZone.
Un petit Jpanel auquel on pourra ajouter des évènements "souris" fera parfaitement l'affaire (on peindra l'image de Composant au fond de ce JPanel).
Tu dois donc créer une nouvelle classe qui étend JPanel pour réaliser l'insertion et le placement dans la DropZone.
Une fois que c'est fait, tu postes le code et on passe au système de déplacement.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package monpackage; import java.awt.Dimension; import java.awt.Graphics; import javax.swing.JPanel; public class ComposantDeplacable extends JPanel{ public Composant composant; public ComposantDeplacable(Composant c){ composant=c; setPreferredSize(new Dimension(composant.longueur,composant.largeur)); } public void paintComponent(Graphics g){ super.paintComponent(g); g.drawImage(composant.image, composant.x, composant.y,composant.longueur,composant.largeur,null); } }
ComposantDeplacable me semble OK
il faut maintenant modifier la méthode insert de la DropZone pour ajouter ce ComposantDeplacable à la DropZone
voir pour cela :
- Layout null pour la DropZone
- méthode setBounds appliquée à ComposantDeplacable
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package monpackage; import java.awt.Dimension; import java.awt.Graphics; import javax.swing.JPanel; public class ComposantDeplacable extends JPanel{ public Composant composant; public ComposantDeplacable(Composant c){ composant=c; setPreferredSize(new Dimension(composant.longueur,composant.largeur)); } public void paintComponent(Graphics g){ super.paintComponent(g); g.drawImage(composant.image, composant.x, composant.y,composant.longueur,composant.largeur,null); } }
Code:
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 package monpackage; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; import java.awt.datatransfer.DataFlavor; import java.util.ArrayList; import java.util.Iterator; import javax.swing.JPanel; import javax.swing.TransferHandler; public class DropZone extends JPanel{ ArrayList<ComposantDeplacable> liste; public DropZone() { setTransferHandler(new DropTransfertHandler()); this.setBackground(Color.white); setLayout(null); liste=new ArrayList<>(); } public void insert(ComposantDeplacable c){ liste.add(c); repaint(); } public void paintComponent(Graphics g){ super.paintComponent(g); for(Iterator<ComposantDeplacable> it=liste.iterator();it.hasNext();) { ComposantDeplacable ce=(ComposantDeplacable)it.next(); ce.setBounds(ce.composant.x, ce.composant.y,ce.composant.longueur,ce.composant.largeur); add(ce); } } }
Ce n'est pas la conclusion à laquelle tu aurais du arriver :
dans la classe DropZone :
1) c'est le travail de la méthode insert de placer le ComposantDeplacable
-> c'est dans cette méthode qu'il faut utiliser le setBounds
2) il est inutile de mettre le ComposantDeplacable dans un ArrayList (la classe JPanel a sa propre liste de composants)
-> tu dois supprimer l'ArrayList
3) ce n'est pas le travail de paintComponent que de placer un composant sur l'écran
-> tu dois donc supprimer purement et simplement la méthode paintComponent
c'est parce que je dois pouvoir sauvegarder les informations sur les composants de la dropZone que je stocke chaque composant dans une arraylist s'il y a un autre moyen comme tu le dis comment l'utiliser?
Ah oui, pour pouvoir recharger un écran qui aura été composé avec la DropZone.
Bon, dans ce cas c'est Ok.
Il y a une autre méthode de JPanel qui est getComponents() qui permet d'obtenir la liste effectives des composants se trouvant sur la DropZone.
- avantage : si un composant est supprimé de la DropZone, la liste est à jour.
- inconvénient : la liste de composants n'est pas typée ; il faut faire un "cast" pour obtenir un ComposantDeplacable
ArrayList :
- avantage : la liste de composants est typée ; on peut manipuler directement les ComposantDeplacable
- inconvénient : il faut mettre à jour l'ArrayList à chaque insertion/suppression de composants
... à ce stade, les deux se valent ; à toi de choisir.
Il faut quand même faire les corrections 1 et 3 expliquées dans mon post précédent.
c'est déjà fait l’attend les instructions pour la suite
Pour déplacer un ComposantDeplacable dans la DropZone, il faut que le ComposantDeplacable réagisse à l'évènement "drag" de la souris.
On ne va pas utiliser le protocole Drag and Drop car un simple MouseMotionListener sera suffisant en utilisant sa méthode mouseDragged.
Quand on va maintenir la souris appuyée sur le ComposantDeplacable la méthode mouseDragged va récupérer les coordonnées de la souris de cette façon :
ici j'ai utilisé un MouseMotionAdapter pour ne pas avoir à redéfinir toutes les autres méthodes du MouseMotionListener.Code:
1
2
3
4
5
6 MouseMotionAdapter mma = new java.awt.event.MouseMotionAdapter() { @Override public void mouseDragged(java.awt.event.MouseEvent evt) { Point p = evt.getPoint(); } }
Ajoute le MouseMotionAdapter au ComposantDeplacable et tâche de voir les coordonnées de déplacement de p avec :
Une fois que tu vois que ces coordonnées s'affichent au fur et à mesure que la souris se déplace,Code:System.out.println(p);
imagine un système qui permet alors que le ComposantDeplacable suive le mouvement
bon là je suis un peux confus car je dessinais mes composants je devais juste changer les coordonnées et utiliser la méthode repaint() et comme je les ajoutes comment modifier leur position dans mon dropZone?
Poste à nouveau les deux classes DropZone et ComposantDeplacable que je vois où tu en est
bon là j'effectue les déplacements mais le coordonnées sont un peux bizarre car lorsque j'effectue le déplacement dans le dropzone des coordonnées négatives apparaissent je ne sais pas pourquoi voilà mes code:
Code:
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 package monpackage; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import javax.swing.JPanel; public class ComposantDeplacable extends JPanel implements MouseMotionListener{ public Composant composant; public int x,y; public DropZone d; public ComposantDeplacable(Composant c,DropZone dz){ composant=c; d=dz; setPreferredSize(new Dimension(composant.longueur,composant.largeur)); addMouseMotionListener(this); } public void paintComponent(Graphics g){ super.paintComponent(g); g.drawImage(composant.image, composant.x, composant.y,composant.longueur,composant.largeur,null); } @Override public void mouseDragged(MouseEvent e) { Point p=e.getPoint(); d.ModifPosition(this, p); System.out.println(p.x+" "+p.y); } @Override public void mouseMoved(MouseEvent e) { } }
Code:
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 package monpackage; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; import java.awt.datatransfer.DataFlavor; import java.util.ArrayList; import java.util.Iterator; import javax.swing.JPanel; import javax.swing.TransferHandler; public class DropZone extends JPanel{ ArrayList<ComposantDeplacable> liste; public DropZone() { setTransferHandler(new DropTransfertHandler()); this.setBackground(Color.white); setLayout(null); liste=new ArrayList<>(); } public void insert(ComposantDeplacable c){ liste.add(c); add(c); c.setBounds(c.x, c.y,c.composant.longueur,c.composant.largeur); } public void ModifPosition(ComposantDeplacable c,Point p){ c.setBounds(p.x, p.y,c.composant.longueur,c.composant.largeur); } }
Bon, c'est pas mal.
Maintenant, le problème c'est un phénomène de "tremblotement" au moment du déplacement.
Il est causé par l'application directe des nouvelles coordonnées.
Il faut y aller plus doucement et n'appliquer que la différence entre l'ancienne position de la souris et la nouvelle position.
Pour cela, on enregistre l'ancienne position en conservant l'évènement précédent.
1) on crée une variable MouseEvent chargée de conserver l'ancienne position
2) on calcule la différence de position et on applique que cette différence :Code:
1
2private java.awt.event.MouseEvent evt_prec = null;
tu verras que le glissement est nettement plus doux.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 @Override public void mouseDragged(MouseEvent e) { // Point p=e.getPoint(); // // d.ModifPosition(this, p); // System.out.println(p.x+" "+p.y); if (evt_prec == null) { evt_prec = e; return; } int dX = e.getX() - evt_prec.getX(); int dY = e.getY() - evt_prec.getY(); Point loc = new Point(getLocation().x + dX, getLocation().y + dY); setLocation(loc); }
bon là c'est beaucoup mieux maintenant nous allons aborder la partie la plus difficile la liaisons entre les composants. ici l'idée c'est de relier les composants entre eux avec des lignes qui seront réactives aux clic de la souris je doit avouer que je n'ai aucune idée sur comment faire j’attends tes instructions.
Nan, nan, il ne faut pas attendre :nono:
Tu dois d'abord essayer par toi-même car il est possible que tu trouves une meilleure solution que moi.
J'ai été très directif pour le drag 'n drop car tu étais mal parti,
mais maintenant que tu es sur un nouveau palier de ton application il faut y aller.
Comme d'habitude, une fois que tu as quelque chose, tu postes le code et on en discute.
ok
bon j'essaie de me connecter a ma bd mysql j'ai télécharger mysql jdbc et lorsque je veux me connecter on m'affiche le message suivant:
voila mon code:Code:
1
2
3com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 String pilote = "com.mysql.jdbc.Driver"; try{ Class.forName(pilote); Connection connexion = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/hospital","root","pass"); //msg.dialog("OK"); Statement instruction = connexion.createStatement(); }catch(Exception e){ //msg.dialog("!OK \n"+e); System.out.print(e); }
c'est bon le service mysql n’étais pas démarré
Et ta liaison entre composants sur la DropZone ?
je n'y suit pas encore mon encadreur m'a demandé d"éditer d'abord les composants. Ceci dit il m'a aussi demandé d'utiliser postrgreSQL lorsque je tape la commande suivante en ligne de commande:
Sa marche bien mais lorsque je me connecte avec eclipse j'ai un soucis voila mon code:Code:
1
2 insert into 'public'.'Etudiant' (matricule,nom,prenom,sexe) values ('sefnvze','sdvre','zercze','vercd')
et voila l'erreur:Code:
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 package monpackage; import java.beans.Statement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.*; import java.util.Enumeration; import java.util.Properties; public class ConectDB { public static void main(String[] args) { try { Class.forName("org.postgresql.Driver"); System.out.println("DRIVER OK ! "); String url = "jdbc:postgresql://localhost:5432/Universite"; String user = "postgres"; String passwd = "keryjames"; Connection conn = DriverManager.getConnection(url, user, passwd); System.out.println("Connection effective !"); java.sql.Statement state=conn.createStatement(); String req= "insert into 'public'.'Etudiant' (matricule,nom,prenom,sexe) values ('sefnvze','sdvre','zercze','vercd')"; state.executeQuery(req); } catch (Exception e) { e.printStackTrace(); System.out.print(e); } } }
je ne sais pas quoi faireCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 DRIVER OK ! Connection effective ! org.postgresql.util.PSQLException: ERREUR: erreur de syntaxe sur ou près de « 'public' » Position*: 13 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2101) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1834) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:510) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:372) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:252) at monpackage.ConectDB.main(ConectDB.java:26) org.postgresql.util.PSQLException: ERREUR: erreur de syntaxe sur ou près de « 'public' » Position*: 13
Bon, je connais pas PostGre mais ça doit être tout con.
La trace d'erreur indique Position*: 13 ce qui correspond à la 1ère apostrophe
alors essaye sans apostrophe :
sinon il a vraiment du temps à perdre pour te faire changer de SGBDCode:String req= "insert into public.Etudiant (matricule,nom,prenom,sexe) values ('sefnvze','sdvre','zercze','vercd')";
je l'ai fait sa me dit:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 DRIVER OK ! Connection effective ! org.postgresql.util.PSQLException: ERREUR: la relation « public.etudiant » n'existe pas Position*: 13 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2101) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1834) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:510) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:372) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:252) at monpackage.ConectDB.main(ConectDB.java:25) org.postgresql.util.PSQLException: ERREUR: la relation « public.etudiant » n'existe pas Position*: 13
On va tourner en rond.
Poste une nouvelle discussion sur le forum JDBC (et peut-être aussi PostGreSQL)
pour la liaison entre les composants mon encadreur m'a recommandé d'utiliser le magnétisme et je n'ai aucune idée. tu a une idée sur le sujet ou une meilleur idée?
Ton encadreur a peut-être un magnétisme personnel mais c'est un concept inconnu dans Java :mouarf:
Sérieusement, cela veut dire qu'il faut que le connecteur s'attache automatiquement au ComposantDeplacable dès qu'on le fait passer à proximité.
Avant d'en arriver là :
- as-tu pu résoudre ton problème de base de données ?
- qu'est-ce que tu as déjà fait pour programmer le connecteur ?
je n'ai pas encore résolu mon problème de BD mais j’étudie une solution pour la seconde question pas grand chose mais je sais ceci le connecteur aura les propriétés suivantes 2 composantdeplacable (source et destination), une longueur, un point de départ et un point d'arrivé maintenant il faut pouvoir tracer un trait entre ces 2 composants
Le connecteur c'est ce qui va relier les ComposantDeplacables
oui c'est bien sa. Pour le problème d’insertion c'est bon j'ai résolu le problème
bon voilà mon connexteur:
Code:
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 package monpackage; import java.awt.Graphics; import java.awt.Point; import javax.swing.JPanel; public class Connecteur extends JPanel{ public ComposantDeplacable c1; public ComposantDeplacable c2; public Point p1; public Point p2; public Connecteur(){ } public void InitierConnexion(ComposantDeplacable c){ c1=c; p1.x=c1.getX()+c1.getWidth(); p1.y=(c1.x+c1.getHeight())/2; } public void TerminerConnexion(ComposantDeplacable c){ c2=c; p2.x=c2.x; p2.y=(c2.y+c2.getHeight())/2; repaint(); } public void paintComponent(Graphics g){ super.paintComponent(g); g.drawLine(p1.x, p1.y, p2.y, p2.y); } }
bon voilà mon connexteur:
Code:
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 package monpackage; import java.awt.Graphics; import java.awt.Point; import javax.swing.JPanel; public class Connecteur extends JPanel{ public ComposantDeplacable c1; public ComposantDeplacable c2; public Point p1; public Point p2; public Connecteur(){ } public void InitierConnexion(ComposantDeplacable c){ c1=c; p1.x=c1.getX()+c1.getWidth(); p1.y=(c1.x+c1.getHeight())/2; } public void TerminerConnexion(ComposantDeplacable c){ c2=c; p2.x=c2.x; p2.y=(c2.y+c2.getHeight())/2; repaint(); } public void paintComponent(Graphics g){ super.paintComponent(g); g.drawLine(p1.x, p1.y, p2.y, p2.y); } }
voilà aussi composantDeplacable que j'ai modifié:
Code:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115 package monpackage; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Graphics; import java.awt.MenuItem; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPopupMenu; public class ComposantDeplacable extends JPanel implements MouseListener,MouseMotionListener,ActionListener{ public Composant composant; public int x,y; public DropZone d; private JPopupMenu menu; private JMenuItem editer; private JMenuItem supprimer; private JMenuItem connexion; private JMenuItem connexion1; private Connecteur con; public BareEtat be; private java.awt.event.MouseEvent evt_prec = null; public ComposantDeplacable(Composant c,DropZone dz,BareEtat b){ composant=c; d=dz; setPreferredSize(new Dimension(composant.longueur,composant.largeur)); addMouseListener(this); addMouseMotionListener(this); menu=new JPopupMenu(); editer=new JMenuItem("Editer"); supprimer=new JMenuItem("Supprimer"); connexion=new JMenuItem("Initier Connexion"); connexion1=new JMenuItem("Finaliser Connexion"); menu.add(editer); menu.add(supprimer); menu.add(connexion); menu.add(connexion1); editer.addActionListener(this); supprimer.addActionListener(this); connexion.addActionListener(this); be=b; } public void paintComponent(Graphics g){ super.paintComponent(g); g.drawImage(composant.image, composant.x, composant.y,composant.longueur,composant.largeur,null); } @Override public void mouseDragged(MouseEvent e) { if (evt_prec == null) { evt_prec = e; return; } int dX = e.getX() - evt_prec.getX(); int dY = e.getY() - evt_prec.getY(); Point loc = new Point(getLocation().x + dX, getLocation().y + dY); setLocation(loc); System.out.println(loc.x+" "+loc.y); d.ModifPosition(this, loc); } @Override public void mouseMoved(MouseEvent e) { } @Override public void mouseClicked(MouseEvent arg0) { } @Override public void mouseEntered(MouseEvent e) { be.BareEtatTexte(this.composant.nom); setCursor(new Cursor(Cursor.HAND_CURSOR)); } @Override public void mouseExited(MouseEvent arg0) { be.BareEtatTexte(""); } @Override public void mousePressed(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { if(e.isPopupTrigger()){ menu.show(this, e.getX(), e.getY()); } } @Override public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("Editer")){ JOptionPane.showMessageDialog(null, "Vous avez cliqué sur Editer"); } if(e.getActionCommand().equals("Supprimer")){ this.setVisible(false); d.liste.remove(this); } if(e.getActionCommand().equals("Initier connexion")){ con.InitierConnexion(this); } if(e.getActionCommand().equals("Finaliser connexion")){ con.TerminerConnexion(this); } } }
Je ne peux pas tester, il manque la classe BareEtat
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package monpackage; import javax.swing.JPanel; import javax.swing.JLabel; import javax.swing.SwingConstants; public class BareEtat extends JPanel{ private static final long serialVersionUID = 1L; JLabel label; public BareEtat() { label=new JLabel(); add(label, SwingConstants.CENTER); this.setVisible(true); } public void BareEtatTexte(String texte) { label.setText(texte); this.setVisible(true); } }
la classe DropTransfertHandler a du être modifiée aussi.
Tu peux la re-poster ?
Code:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 package monpackage; import java.awt.Point; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; import javax.swing.TransferHandler; public class DropTransfertHandler extends TransferHandler{ @Override public boolean importData(TransferHandler.TransferSupport support){ if(!canImport(support)) return false; Composant comp = null; try { comp = (Composant) support.getTransferable().getTransferData(ComposantFlavor.getComposantFlavor()); } catch (UnsupportedFlavorException e) { System.out.print(e); e.printStackTrace(); } catch (IOException e) { System.out.print(e); e.printStackTrace(); } // création d'un nouveau composant à partir du clone //Composant copie = comp.composant.getClone(); Composant copie = comp.getClone(); // recuperation de la drop-zone DropZone destination = (DropZone) support.getComponent(); // coordonnées du largage Point p = support.getDropLocation().getDropPoint(); ComposantDeplacable cd=new ComposantDeplacable(copie,destination,destination.b); cd.x=p.x; cd.y=p.y; destination.insert(cd); return true; } @Override public boolean canImport(TransferHandler.TransferSupport info) { if (!info.isDataFlavorSupported(ComposantFlavor.getComposantFlavor())) { return false; } return true; } } package monpackage; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; import java.awt.datatransfer.DataFlavor; import java.util.ArrayList; import java.util.Iterator; import javax.swing.JPanel; import javax.swing.TransferHandler; public class DropZone extends JPanel{ ArrayList<ComposantDeplacable> liste; public BareEtat b; public boolean etat; public DropZone() { setTransferHandler(new DropTransfertHandler()); this.setBackground(Color.white); setLayout(null); liste=new ArrayList<>(); } public void insert(ComposantDeplacable c){ liste.add(c); add(c); c.setBounds(c.x, c.y,c.composant.longueur,c.composant.largeur); } public void ModifPosition(ComposantDeplacable c,Point p){ c.setBounds(p.x, p.y,c.composant.longueur,c.composant.largeur); } }
ça marche pas, la barre état n'est pas initialisé dans DropZone
il faut aussi la placer quelque part non ?
en fait j'utilise la classe acceuil pour initialiser:
Code:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 package monpackage; import java.awt.BorderLayout; import java.awt.Image; import java.awt.Point; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JPanel; import javax.swing.JFrame; import java.awt.Dimension; public class Acceuil extends JFrame { private static final long serialVersionUID = 1L; private JPanel jContentPane = null; /** * This is the default constructor * @throws IOException */ public Acceuil() throws IOException { super(); initialize(); } public static void main(String args[]){ try { new Acceuil(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * This method initializes this * * @return void * @throws IOException */ private void initialize() throws IOException { this.setSize(1000, 550); this.setContentPane(getJContentPane()); this.setTitle("JFrame"); } /** * This method initializes jContentPane * * @return javax.swing.JPanel * @throws IOException */ private JPanel getJContentPane() throws IOException { if (jContentPane == null) { jContentPane = new JPanel(); jContentPane.setLayout(new BorderLayout()); Image image = ImageIO.read(Acceuil.class.getResource("/composants/lignes.png")); Image image2 = ImageIO.read(Acceuil.class.getResource("/composants/genrateur.png")); Composant c=new Composant("semi-conducteur", image); Composant ce=new Composant("generateur", image2); PanneauComposant pc = new PanneauComposant(); ComposantTransferable cp=new ComposantTransferable(c); ComposantTransferable cp2=new ComposantTransferable(ce); pc.ajouterComposant(cp); pc.ajouterComposant(cp2); DropZone dz=new DropZone(); dz.setPreferredSize(new java.awt.Dimension(500,500)); pc.setPreferredSize(new java.awt.Dimension(300,500)); pc.add(c, null); dz.b=new BareEtat(); dz.b.setPreferredSize(new java.awt.Dimension(500,30)); jContentPane.add(pc,BorderLayout.WEST); jContentPane.add(dz,BorderLayout.CENTER); jContentPane.add(dz.b,BorderLayout.SOUTH); } return jContentPane; } } // @jve:decl-index=0:visual-constraint="14,15"
Dans Accueil, il faut ajouter un setVisible(true)
sinon cela ne marche pas !
et quelle est la manipulation pour relier les composants ?
en principe on doit faire un clic droit et cliquer sur initier connexion et un clic droit sur un autre composant et cliquer sur finaliser connexion mais sa ne marche pas pourtant je crois que l'algorithme est bon