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

Interfaces Graphiques en Java Discussion :

coordonnées d'un click sur une image


Sujet :

Interfaces Graphiques en Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 80
    Points : 34
    Points
    34
    Par défaut coordonnées d'un click sur une image
    Bonjour,
    je souhaite réaliser une application qui me permet de cliquer sur une image et de recuperer les coordonnées (en pixel) du point de l'image sur lequel j'ai cliqué.
    Je dois tout faire , ouvrir l'image , ecouter le click et retrouvé les coordonnées du pixel. Je ne sais pas trop comment prendre le probleme.

    comment recuperer des informations sur l'image pour le point où j'ai cliqué (et pas des informations sur le curseur)?

    Pourriez vous me donner quelques petites pistes svp ?? (des idées, des classes à consulter, etc etc)

    Je ne sais pas du tout par où commencer , j'espere que j'ai été clair dans mes explications

    Merci beaucoup d'avance ,
    a+

  2. #2
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Bonjour,

    Je vais essayer de te donner quelques pistes :

    1)Tout d'abord il faut dessiner l'image, pour cela personellement je fais ça en étendant la classe JPanel et en redefinissant la méthode paintComponent comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @Override
    protected void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2=(Graphics2D) g;
    g2.drawImage(monImage,0,0,null);
    }
    2)Ensuite tu ajoute un MouseListener à ton panel et dans la méthode mouseClicked, tu peux obtenir le point cliqué via la méthode getPoint() de MouseEvent.

    Voilà, je sais pas si c'est assez clair
    En tout cas, si tu as d'autres questions n'hésite pas à les poser.

    @+

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 80
    Points : 34
    Points
    34
    Par défaut
    Merci beaucoup

    Mais est ce que les coordonnées que j'obtient avec getPoint() sont celles du curseur ou celle du pixel de l'image.
    C'est surtout ça mon probleme ...

  4. #4
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Lorsqu'on sait pas un truc en java il faut aller lire le javadoc de la classe concernée, et méthode concernée. Chaque niveau est une mine d'informations. Et pour getPoint on lit : Returns the x,y position of the event relative to the source component (renvoie les positions x,y de l'événement relativement au composant d'origine).

    Donc, pas du tout les coordonnées en pixel de l'image, sauf si ton composant correspond juste pile à ton image.

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 104
    Points : 119
    Points
    119
    Par défaut
    mais grâce à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.awt.Toolkit.getDefaultToolkit().getScreenSize();
    qui renvoie la taille de l'écran, tu peux facilement calculer la position du clic par rapport à l'écran, sachant que l'emplacement de ta Frame est donné par

  6. #6
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 55
    Points
    55
    Par défaut
    salut
    moi aussi je cherche la meme chose que Piteon et je n arrive pas a faire le programme si qlq un peu m aider.
    a +

  7. #7
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Points : 156
    Points
    156
    Par défaut
    Bonjour,
    j'ai repris le code que j'ai posté ailleurs.

    Mathématiquement, vous devez effectuer une transformation de l'espace du Panel dans celui de l'image.

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    public class LPanel extends JPanel
    {
         java.awt.Image img ;
     
         protected java.awt.event.MouseAdapter mouseAdapter =  new
                 java.awt.event.MouseAdapter() {
                public void mouseClicked(java.awt.event.MouseEvent e) 
               {
                    if ( img != null )
                    {
                        double scale = Math.min(getWidth()/img.getWidth(),getHeight() /img.getHeight());
                        double xCoordInImageSpace = e.getX()/scale;
                        double yCoordInImageSpace = e.getY()/scale;
                    }
                }
        };
     
         class LPanelUI extends javax.swing.plaf.PanelUI
         {
             public void paint(Graphics g, JComponent c) 
            {
                   if ( img != null )
                  {
                   java.awt.Graphics2D g2=(java.awt.Graphics2D)g;
                   double scale = Math.min(c.getWidth()/img.getWidth(),c.getHeight() /img.getHeight());
                   java.awt.geom.AffineTransform aft = g2.getTransform();
                   g2.scale(scale);
                   g2.drawImage(img,0,0,null);
                   g2.setTransform(aft);
                  }
            }
         }
     
         public void setUI(JPanelUI ui )
        {
            super.setUI(new LPanelUI ());
        }
     
        public void setImage(java.awt.Image img )
       {
            this.img = img ;
       }
     
       public LPanel()
       {
             addMouseListener(mouseAdapter);
       }
     
    }
    (xCoordInImageSpace , yCoordInImageSpace ) sont les coordonnées du point dans l'image.
    Attention : l'image n'est pas centrée. Dans ce cas, n'oubliez pas de prendre en compte la translation.

    A+
    H.

  8. #8
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 55
    Points
    55
    Par défaut
    salut
    merci pour votre attention
    a vrai dire j ai rien compris
    i.e: ou il est l image ,quelle transforamtion..?
    si vous pouvez m explique plus
    voila ce que j ai fais mais ca marche pas

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    import javax.swing.* ; 
    import java.awt.* ; 
    import java.awt.event.*;
     
    class MaFenetre extends JFrame implements MouseListener 
     
    { MaFenetre () 
     
    { setTitle ("IMAGES") ; 
    setSize (800, 500) ; 
    pan = new Panneau() ; 
    getContentPane().add(pan) ; 
    pan.addMouseListener(new MyMouseListener(pan));
     
     
    } 
    private JPanel pan ; 
    } 
    class Panneau extends JPanel 
    { public Panneau() 
    { photo = getToolkit().getImage("sans titre.gif") ; 
    } 
    public void paintComponent(Graphics g) 
    { super.paintComponent(g) ; 
    int x=10, y=10 ; 
    if(photo != null) 
    {g.drawImage (photo, x, y, this);System.out.println("photo");} 
    } 
    private Image photo = null; 
    } 
     
     public void mouseClicked(MouseEvent ev)
      { int x = ev.getX() ;
        int y = ev.getY() ;
        System.out.println ("clic au point de coordonnees " + x + ", " + y ) ;
      }
      public void mousePressed (MouseEvent ev) {}
      public void mouseReleased(MouseEvent ev) {}
      public void mouseEntered (MouseEvent ev) {}
      public void mouseExited  (MouseEvent ev) {}
    }
     
        public void mouseClicked(MouseEvent e) {
          x=e.getX();
          y=e.getY();
        }
     
     
     public class essai aff1
     
    { public static void main (String args[]) 
    { MaFenetre fen = new MaFenetre() ; 
    fen.setVisible(true) ; 
    } 
    }
    merci d avance et a plus

  9. #9
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    L'image est celle dont tu parles depuis le début. Où elle se trouve ?... Sur un écran, dans une fenêtre, je suppose, c'est à dire un plan.

    Les clics souris se font sur un pixel de l'écran, pixel qui se repère par un point sur un plan. Ce point a des coordonnées.

    Si tu te cales par rapport à l'écran, ou par rapport à la fenêtre, ou par rapport à l'image, les coordonnées n'auront pas la même valeur.

    Les coordonnées que tu reçois dans les évèvements souris se calent par rapport au composant source.

    Voilà pour des explications d'ordre théorique.

    Maintenant, peux-tu nous expliquer ce qui ne marche pas quand tu vois que quelque chose ne marche pas ?

  10. #10
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par gifffftane
    L'image est celle dont tu parles depuis le début. Où elle se trouve ?... Sur un écran, dans une fenêtre, je suppose, c'est à dire un plan.
    ...........

    Lorsqu'on sait pas un truc en java il faut aller lire le .......
    Maintenant, peux-tu nous expliquer ce qui ne marche pas quand tu vois que quelque chose ne marche pas ?
    et bien sur se forome on apprend et on pose des questions pour comprendre et vous je vois que a chaque fois que quelqu un pose une question vous vous mouquez de nous !!!!!!

Discussions similaires

  1. click sur une image - affichage <INPUT TEXT
    Par bilou95 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/05/2007, 11h13
  2. Un refresh de la page dés click sur une image
    Par bilou95 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/04/2007, 09h54
  3. Coordonnées de la souris sur une image
    Par renaud26 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/03/2006, 21h11
  4. Réponses: 6
    Dernier message: 15/03/2006, 17h10
  5. Débutant - deux on click sur une image
    Par Space Cowboy dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/01/2006, 15h25

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