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

 Java Discussion :

MouseListener et MouseMotionListener


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 6
    Par défaut MouseListener et MouseMotionListener
    Bonjour,

    j'essaye d'integrer un rectangle de selection avec la souris sur une image dans un JLabel dans le but d'enregistrer la partie selectionnée dans un JLabel.

    je sais qu'il faut utiliser un MouseListener et MouseMotionListener ainsi que travailler sur un BufferedImage mais je n'arrive pas à implementer le tout dans mon programme :s

    qqu'un aurait il un exemple de code simple pour que puisse me faire une idee de la maniere d'implementer les evenements souris et que je comprenne la procedure.

    je vous remercie par avance pour votre aide je galere la dessus depuis plus d'une semaine et mon tuteur s'impatiente :s

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    Par défaut
    Bonjour stef_nancy,
    J'espere que c'est ce genre de choses que tu cherches: (en 3 classes)

    La classe qui t'interesse le plus (avec les MouseListener et MouseMotionListener)
    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
    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
     
    package mesClasses;
     
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
    import java.awt.image.BufferedImage;
     
    import javax.swing.ImageIcon;
    import javax.swing.JLabel;
     
    public class ImageOriginale extends JLabel implements MouseListener, MouseMotionListener{
     
    	Image img;
    	int xRect;
    	int yRect;
    	int largRect;
    	int hautRect;	
    	boolean dessinerRectangleSelection=false;
     
    	public ImageOriginale(ImageIcon imgIcon){
    		this.setIcon(imgIcon);
    		this.img=imgIcon.getImage();
     
    		this.addMouseListener(this);
    		this.addMouseMotionListener(this);
    	}
     
    	public void paint(Graphics g){
    		super.paint(g);
     
    		if(this.dessinerRectangleSelection){
     
    			int x=this.xRect;
    			int y=this.yRect;
    			int l=this.largRect;
    			int h=this.hautRect;
     
    			if(l<0){
    				x=x+l;
    				l=-l;
    			}
    			if(h<0){
    				y=y+h;
    				h=-h;
    			}
     
    			g.setColor(Color.RED);
    			g.drawRect(x, y, l, h);	
    		}		
    	}
     
    	public void mousePressed(MouseEvent me) {
    		this.xRect=me.getX();
    		this.yRect=me.getY();
    		this.largRect=0;
    		this.hautRect=0;
     
    		this.dessinerRectangleSelection=true;
    	}	
     
    	public void mouseReleased(MouseEvent me) {
    		this.dessinerRectangleSelection=false;
     
    		if(this.largRect<0){
    			this.xRect=this.xRect+this.largRect;
    			this.largRect=-this.largRect;
    		}
    		if(this.hautRect<0){
    			this.yRect=this.yRect+this.hautRect;
    			this.hautRect=-this.hautRect;
    		}
     
    		int dx1=0;
    		int dy1=0;
    		int dx2=this.largRect;
    		int dy2=this.hautRect;
     
    		int sx1=this.xRect;
    		int sy1=this.yRect;
    		int sx2=this.xRect+this.largRect;
    		int sy2=this.yRect+this.hautRect;
     
     
    		BufferedImage bImg=new BufferedImage(this.largRect, this.hautRect, BufferedImage.TYPE_INT_RGB);
    		Graphics g=bImg.getGraphics();
    		g.drawImage(this.img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, null);
    		g.dispose();
     
    		ImageIcon imgIcon=new ImageIcon(bImg);
    		JLabel lblImageSelectionnee=new JLabel(imgIcon);
    		new Fenetre(lblImageSelectionnee, false);
     
    		this.repaint();
    	}
     
    	public void mouseDragged(MouseEvent me) {
    		int x=me.getX();
    		int y=me.getY();
     
    		this.largRect=x-this.xRect;
    		this.hautRect=y-this.yRect;
     
    		this.repaint();
    	}
     
    	public void mouseMoved(MouseEvent me) {}
    	public void mouseClicked(MouseEvent me) {}
    	public void mouseEntered(MouseEvent me) {}
    	public void mouseExited(MouseEvent me) {}	
    }
    Ensuite, une classe derivant de JFrame, pour visualiser ce que ça donne:
    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 mesClasses;
     
    import javax.swing.JFrame;
    import javax.swing.JLabel;
     
    public class Fenetre extends JFrame{
     
    	public Fenetre(JLabel lbl, boolean arreterProcessusALaFermeture){
    		this.getContentPane().add(lbl);
    		this.pack();
    		this.setResizable(false);
    		this.setVisible(true);
     
    		if(arreterProcessusALaFermeture)
    			this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    	}
     
    }
    et enfin, un main pour tester tout ça:
    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
     
    package mesClasses;
     
    import java.io.File;
     
    import javax.swing.ImageIcon;
    import javax.swing.JFileChooser;
     
    public class SelectionZoneImage {
     
    	public static void main(String [] args){
    		JFileChooser jfc=new JFileChooser();
    		jfc.showOpenDialog(null);
     
    		File fichierImage;
    		if((fichierImage=jfc.getSelectedFile())!=null){
    			ImageIcon imgIcon=new ImageIcon(fichierImage.getAbsolutePath());
    			ImageOriginale imgOriginale=new ImageOriginale(imgIcon);
    			new Fenetre(imgOriginale, true);
    		}		
    	}
     
    }
    Il se pourrait qu'il y ait un peu de superflu, vu que je l'ai implémenté vite fait, mais ça devrait te permettre de comprendre ce que tu voulais, et te servire comme base pour les améliorations.

    J'espere que ça t'aidera

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    Par défaut
    ...... dans le but d'enregistrer la partie selectionnée...
    Je viens de voir ça. donc tu ne veux pas afficher la partie séléctionnée mais plutot l'enregistrer dans un fichier? Si c'est le cas, utilise la classe ImageIO avec la méthode write

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 6
    Par défaut
    Merci, pour ton aide. Je travaille dessus. je t'informerai du resultat.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    Par défaut
    euh... je viens de me rendre compte que j'avais oublié quelque chose, qui declenche une exception...

    Si tu fais un simple clique sur l'image, une excpetion est lancée car le rectangle s'aparentra a un point (pas le largeur ni de hauteur), et les instuction se trouvant dans
    "public void mouseReleased(MouseEvent me)" ne pourront pas s'executer normalement...

    rajoute ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if((me.getX()==this.xRect)&&(me.getY()==this.yRect))
            return;
    juste après le "this.dessinerRectangleSelection=false;" dans la méthode "mouseReleased" pour regler ce probleme

    tout cela se trouve bien sur dans la classe "ImageOriginale".

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

Discussions similaires

  1. Evenements MouseListener / MouseMotionListener
    Par rdver dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 01/01/2014, 14h31
  2. MouseListener, MouseMotionListener --> MouseDragged(MouseEvent event)
    Par blackhock dans le forum EDT/SwingWorker
    Réponses: 3
    Dernier message: 06/07/2009, 08h52
  3. Réponses: 6
    Dernier message: 10/09/2007, 22h55
  4. [JFrame] [MouseListener] recupérer evenement souris
    Par kikoufr dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 19/08/2004, 18h45
  5. [MouseListener] Confusion de listener
    Par i.took.the.red.pill dans le forum Agents de placement/Fenêtres
    Réponses: 14
    Dernier message: 18/06/2004, 14h42

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