ok sa marche on peut passer à la prochaine phase comme je te l'ai expliqué. merci et j’attends tes instructions.
ok sa marche on peut passer à la prochaine phase comme je te l'ai expliqué. merci et j’attends tes instructions.
La force d'un programmeur ne réside pas dans le fait qu'il écrive des codes puissants mais dans sa capacité à les maintenir!!!
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
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 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); } }
La force d'un programmeur ne réside pas dans le fait qu'il écrive des codes puissants mais dans sa capacité à les maintenir!!!
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
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
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 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 : 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
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); } } }
La force d'un programmeur ne réside pas dans le fait qu'il écrive des codes puissants mais dans sa capacité à les maintenir!!!
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
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
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?
La force d'un programmeur ne réside pas dans le fait qu'il écrive des codes puissants mais dans sa capacité à les maintenir!!!
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.
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
c'est déjà fait l’attend les instructions pour la suite
La force d'un programmeur ne réside pas dans le fait qu'il écrive des codes puissants mais dans sa capacité à les maintenir!!!
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part System.out.println(p);
imagine un système qui permet alors que le ComposantDeplacable suive le mouvement
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
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?
La force d'un programmeur ne réside pas dans le fait qu'il écrive des codes puissants mais dans sa capacité à les maintenir!!!
Poste à nouveau les deux classes DropZone et ComposantDeplacable que je vois où tu en est
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
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 : 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
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 : 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
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); } }
La force d'un programmeur ne réside pas dans le fait qu'il écrive des codes puissants mais dans sa capacité à les maintenir!!!
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 private java.awt.event.MouseEvent evt_prec = null;
tu verras que le glissement est nettement plus doux.
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 @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); }
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
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.
La force d'un programmeur ne réside pas dans le fait qu'il écrive des codes puissants mais dans sa capacité à les maintenir!!!
Nan, nan, il ne faut pas attendre
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.
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
ok
La force d'un programmeur ne réside pas dans le fait qu'il écrive des codes puissants mais dans sa capacité à les maintenir!!!
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
La force d'un programmeur ne réside pas dans le fait qu'il écrive des codes puissants mais dans sa capacité à les maintenir!!!
c'est bon le service mysql n’étais pas démarré
La force d'un programmeur ne réside pas dans le fait qu'il écrive des codes puissants mais dans sa capacité à les maintenir!!!
Et ta liaison entre composants sur la DropZone ?
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager