Ecouter un objet quelconque
Résolu
arthurg95
Messages postés
2421
Date d'inscription
Statut
Membre
Dernière intervention
-
arthurg95 Messages postés 2421 Date d'inscription Statut Membre Dernière intervention -
arthurg95 Messages postés 2421 Date d'inscription Statut Membre Dernière intervention -
Arthur
Étudiant
Inscription : mai 2013
Messages : 4
Points : 0
Ecouter un objet quelconque
Bonjour, je vous présente rapidement mon projet avant d'entrer dans le vif du sujet :
En gros c'est refaire un paint, très grossièrement bien sur, donc j'ai une classe Dessin, qui est mon JPanel, qui contient une liste de forme à dessiner, une classe Fenetre, qui est ma JFrame, une classe Forme, chaque forme est définie par un tableau de point à "relier" pour les dessin, donc avec g.drawPolygon, ...
Et chaque point est aussi dessiné pour être visible et donc cliquable, il est dessiné par un drawPolygon, que j'ai défini, par une zone de 6 pixel de coté autour du point.
Mon problème est que je voudrais écouter cette partie du point qui est dessiné, pour pouvoir déplacer le point avec la souris.
Mais lorsque je j'implémente un mouseListener, tout le JPanel est réceptif aux action, donc peut-importe où je clique "Test" s'affiche (c'était un SOP que j'avais mit pour tester hein )
Une capture pour vous montrer à quoi ressemble ma fenêtre :
http://informatiquelegal.free.fr/Fenetre.PNG
Tout est dit, mais comme personne n'écoute il faut toujours répéter
Étudiant
Inscription : mai 2013
Messages : 4
Points : 0
Ecouter un objet quelconque
Bonjour, je vous présente rapidement mon projet avant d'entrer dans le vif du sujet :
En gros c'est refaire un paint, très grossièrement bien sur, donc j'ai une classe Dessin, qui est mon JPanel, qui contient une liste de forme à dessiner, une classe Fenetre, qui est ma JFrame, une classe Forme, chaque forme est définie par un tableau de point à "relier" pour les dessin, donc avec g.drawPolygon, ...
Et chaque point est aussi dessiné pour être visible et donc cliquable, il est dessiné par un drawPolygon, que j'ai défini, par une zone de 6 pixel de coté autour du point.
Mon problème est que je voudrais écouter cette partie du point qui est dessiné, pour pouvoir déplacer le point avec la souris.
Mais lorsque je j'implémente un mouseListener, tout le JPanel est réceptif aux action, donc peut-importe où je clique "Test" s'affiche (c'était un SOP que j'avais mit pour tester hein )
Une capture pour vous montrer à quoi ressemble ma fenêtre :
http://informatiquelegal.free.fr/Fenetre.PNG
Tout est dit, mais comme personne n'écoute il faut toujours répéter
A voir également:
- Ecouter un objet quelconque
- Ecouter un vocal whatsapp sans ouvrir - Accueil - Messagerie instantanée
- Vente objet occasion entre particulier - Guide
- Ecouter youtube arriere plan - Guide
- Ecouter le repondeur de quelqu'un sans l'appeler - Forum Mobile
- Identifier un objet à partir d'une photo - Guide
1 réponse
Je vois plusieurs manières de faire, en voici deux :
1) Tu stockes chaque point de tes polygones dans une Collection que tu relis à chaque fois pour faire tes drawPolygon dans ton paint(), et lorsque tu as ton mouseListener sur ton JPanel, tu te sers de l'ActionEvent pour déterminer quel point de ta Collection tu as appuyé, puis te le modifies directement dans la Collection en fonction de son déplacement, ce qui entrainera aussi la modification du polygone dessiné.
2) Pour chaque point de ton polygone tu créées un Component (tout petit, juste la taille de ton cercle) que tu ajoutes à ton JPanel, c'est alors sur ces petits objets qu'il faudra ajouter des MouseListener, ils détecteront tout seul que c'est sur eux que tu appuies, et tu les déplaceras également en utilsant l'ActionEvent. Concernant tes drawPolygon il suffira alors de regarder ce que contient le JPanel pour tous les retrouver et les relier les uns aux autres.
1) Tu stockes chaque point de tes polygones dans une Collection que tu relis à chaque fois pour faire tes drawPolygon dans ton paint(), et lorsque tu as ton mouseListener sur ton JPanel, tu te sers de l'ActionEvent pour déterminer quel point de ta Collection tu as appuyé, puis te le modifies directement dans la Collection en fonction de son déplacement, ce qui entrainera aussi la modification du polygone dessiné.
2) Pour chaque point de ton polygone tu créées un Component (tout petit, juste la taille de ton cercle) que tu ajoutes à ton JPanel, c'est alors sur ces petits objets qu'il faudra ajouter des MouseListener, ils détecteront tout seul que c'est sur eux que tu appuies, et tu les déplaceras également en utilsant l'ActionEvent. Concernant tes drawPolygon il suffira alors de regarder ce que contient le JPanel pour tous les retrouver et les relier les uns aux autres.
Je préfère la seconde proposition je pense !
Puis-je simplement extends mes points en JComponent implements ActionListener?
Et si je fais comme ceci, dans le JPanel : addActionListener(le point) c'est ça ?
Exemple (il y a un petit bug avec le déplacement du point, mais si je retrouve comment faire je te le dirais)
1
2
3
4
5
6
7
8
9
10
11
12
public class Points extends JPanel {
int x,y;
public Points(int x,int y,JPanel panel) {
this.x = x;
this.y = y;
addMouseMotionListener(panel);
setBackground(Color.black);
setBounds(x-2,y-2,5,5);//en supposant que ton point face 5 sur 5
}
}
ensuite dans panel qui devra donc implementer MouseMotionListener tu utilises mouseDragged() pour bouger tes points
Code :Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
public void mouseMoved(MouseEvent e) {
}
public void mouseDragged(MouseEvent e) {
Points p = (Points)e.getSource();
p.setLocation(e.getX(),e.getY());
//pas besoin de repaint car setLocation induit automatiquement un repaint
}