IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

[MouseMotionListener] Selection de Pixel


Sujet :

AWT/Swing Java

  1. #1
    Membre expérimenté
    Avatar de simone.51
    Inscrit en
    Juin 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2002
    Messages : 137
    Par défaut [MouseMotionListener] Selection de Pixel
    Bonjour à tous,

    J'ai une image affichée dans un JLabel dans laquelle je dois sélectionner des pixels.
    Lorsque je clique sur l'image(donc sur un pixel ), je fais afficher un objet MyPixel auquel je passe en paramètre l'objet Graphics du Jlabel afin d'y dessiner un carré de 4 pixel de coté.

    J'aimerais pouvoir détecter le passage de la souris sur les différents objet MyPixel afin de pouvoir les déplacer, ...

    Voici l'entete de ma classe MyPixel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class MyPixel extends Canvas implements MouseMotionListener
    Bon, là, je teste en héritant de Canvas, mais j'ai déjà testé avec d'autres (Jabel entre autre) mais le soucis, c qu'il ne détecte pas le passage de ma souris (méthode mouseMoved(MouseEvent arg0) )

    Quelqu'un a une idée?

    Merci

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    En fait, le MouseListener ne réagira que si les composants MyPixel sont ajoutés via la méthode add à leur conteneur. Donc l'usage d'un JLabel est peut-être à éviter, en préférant un JPanel sans layout.

    Pour peindre un tel composant, il suffira de peindre le fond (comme pour le JLabel, aucun changement), puis d'appeler super.paintComponent() pour peindre les objets MyPixel contenus dedans (il me semble).
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre expérimenté
    Avatar de simone.51
    Inscrit en
    Juin 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2002
    Messages : 137
    Par défaut
    Ah....

    Parce qu'en fait, tel que j'ai construit mon programme, un objet MyPixel se dessine directement sur l'image grâce à l'objet Graphics passé en paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public MyPixel(int x, int y,int taille, Graphics g){
        super();
        _posX = x;
        _posY = y;
        _graphics = g;
        _taille = taille;
        _graphics.setColor(new Color(255,255,255));
        _graphics.fillRect(_posX-(_taille/2),_posY-(_taille/2), _taille, _taille);
    }
    C pour cette raison, que j'ai fais plusieurs essais avec des JLabels et autres...
    Le problème, il vient du fait que mon objet n'a pas de consistence, au niveau visuel je parle, et je pense que c pour ça que le mouseMove ne repond pas.

    Mais j'ai pas bien suivi ce que tu m'expliquais xavlours. Le soucis, c que je n'ajoute pas mes myPixels à un conteneur, quand je clique sur l'image, je recup les coordonnée du clic, et ensuite, dans la methode paint, je crée mes instance de MyPixel...

  4. #4
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Pour réagir à un MouseEvent, il faut être un composant, et avoir été ajouté dans une fenetre (ou dans un composant qui est lui ajouté dans une fenetre, ...).

    En fait, c'est surtout le composant sur lequel on clique (qui chez toi hérite de JLabel) qui pose problème. Il devrait être construit dans ce style :
    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
    public class MonComposant extends JPanel {
     
      public MonComposant() {
        super(null);
    // aucun layout, donc on peut placer les composants où on veut
     
        ...
        addMouseListener(...);
      }
     
      public void paintComponent(Graphics g) {
        //peindre l'image de fond si il y en a une
     
        super.paintComponent(g); // dessine les composants MyPixel
      }
      ...
    }
     
    // dans le MouseListener de l'objet MonComposant
    public void MouseClicked(MouseEvent e) {
      MyPixel mp = new MyPixel(e.getX(), e.getY(), taille);
      MonComposant mc = (MonComposant) e.getSource();
      mc.add(mp);
    }
     
    // dans MyPixel
    public class MyPixel extends Canvas ... {
     
      public MyPixel(int x, int y, in taille) {
        ... 
        setBounds(_posX-(_taille/2),_posY-(_taille/2), _taille, _taille);
      }
     
      public void paintComponent(Graphics g) {
        g.fillRect(0, 0, getWidth(), getHeight());
      }
    }
    Ai-je été un peu plus clair ? Avec cette méthode, les objets de type MyPixel sont effectivement ajoutés au composant d'au-dessus. Ils réagiront donc aux MouseEvent.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  5. #5
    Membre expérimenté
    Avatar de simone.51
    Inscrit en
    Juin 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2002
    Messages : 137
    Par défaut
    Ok, c un peu plus clair...

    Bon, j'ai encore qques soucis avec le add(...) qui me fait boucler mon paint, mais c de ma faute à moi... Me reste encore qques modif.

    Par contre, je detecte bien les event souris maintenant... Enfin, qu'avec les méthodes de MouseListener, pas avec MouseMotionListener... mais bon, je dois quand meme pouvoir arriver à connaitre la position de mon curseur avec mouseEntered et MouseExited

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 17h26
  2. [VB6] [Crystal] Selection enregistrement
    Par littlecow dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/01/2005, 13h08
  3. [TImage] Transfert de Picture par pixels.
    Par H2D dans le forum Langage
    Réponses: 9
    Dernier message: 25/10/2003, 14h37
  4. Réponses: 2
    Dernier message: 30/05/2002, 10h19
  5. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo