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 :

Gestions évènements avec souris - Dessiner avec souris


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Points : 31
    Points
    31
    Par défaut Gestions évènements avec souris - Dessiner avec souris
    Bonjour, une fois de + j'ai cherché avant de poster ma question
    mais apparemment personne n'a encore posé cette question
    ou pas dans cette section.

    Notre prof nous a filé la théorie et expliqué en gros, mais pas pratiqué, du coup je suis un peu paumé.
    Je cherche à pouvoir dessiner sur une fenetre blanche avec la souris.
    L'énoncé est bien plus grand et j'ai pas mal d'autres fonctions à y intégrer,
    mais vu que je sèche déjà ici, j'arrive pas à aller plus loin.

    Je vous pose le code que j'ai essayé, mais qui bien sur n'est pas fonctionnel.

    Un conseil ? Une piste ?
    Merci d'avance.




    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
    public class Dessin extends JFrame {
     
    	public Dessin(){
    		JPanel p = new JPanel();
    		p.setLayout(new FlowLayout());
    		Contenu contenu = new Contenu();
    		p.add(contenu);
    		getContentPane().add(p);
    		setSize(600, 600);
    	}
     
    	class Contenu extends JPanel implements MouseListener, MouseMotionListener{
    		int xPrec, yPrec;
    		Graphics g;
     
    		public void Contenu(){
    			xPrec=0; yPrec=0;
    			g = getGraphics();
     
    			addMouseListener(this);
    			addMouseMotionListener(this);
    		}
     
    		public void mousePressed(MouseEvent e) {
    			int x,y;
    			x = e.getX();
    			y = e.getY();
    			xPrec=x;
    			yPrec=y;
    		}
     
    		public void mouseDragged(MouseEvent e) {
    			int x,y;
    		    x = e.getX();
    		    y = e.getY();
    		    g.drawLine(xPrec, yPrec, x, y);
    		    xPrec=x; 
    		    yPrec=y;

  2. #2
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Tu devrais regarder ici

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Points : 31
    Points
    31
    Par défaut
    ça c'est d'la piste ^^
    Merci

    Tu devrais te reconvertir en prof dév en ligne,
    t'aurais du succès
    Sérieusement.

    Tu as ton premier élève ^^

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Points : 31
    Points
    31
    Par défaut
    Arrfff, j'ai lu tout l'article Introduction au dessin en java,
    mais ce n'est pas tout a fait ce que je cherche.

    Ils parlent surtout de créer des formes, de déplacer celles ci, et de travailler avec, or moi ce que j'ai besoin c'est de dessiner à la souris n'importe quoi, à main levée (ou plutôt à souris levée lol)

    Si par hasard tu as une idée ou je pourrais m'informer je suis preneur, sinon en attendant j'avais acheté un livre sur JAVA et en cours on nous a donné 2 pavés pas trés faciles à lire, mais je vais quand même m'y attarder, étant ma seule source d'idées actuellement.

    Merci quand même pour ton lien précèdent.
    Je laisse le sujet ouvert encore quelques heures
    au cas ou...

    Merci d'avance

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Points : 31
    Points
    31
    Par défaut
    Je viens de voir que ce qui m'intéresse ce sont les actions sur MouseMoved et MouseDragged... Je continue mes recherches ^^

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Points : 31
    Points
    31
    Par défaut
    Bon en lisant 2-3 sujets que j'ai trouvé grace a Google et que j'ai lu dans mes livres, j'ai réussi à pondre un bon début de code...

    Mais je suis vraiment coincé avec ces évènements de souris.
    Est-ce que qqn pourrait m'aider pour les évènement svp ?

    Y en a 2 à gérer ce sont :
    MousePressed
    MouseDragged



    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
    import java.awt.*;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
    import javax.swing.*;
     
    public class Dessin extends JFrame implements MouseListener, MouseMotionListener {
        private JPanel drawArea;
        private int x1, y1;
        Graphics g;
     
        public Dessin() {
            //titre de la fenetre
            super("Mon titre bidon pour l'instant");
            this.setSize(new Dimension(650,500));
            this.setResizable(false);
            this.setLocationRelativeTo(null);
     
            // Container
            Container content = getContentPane();
            content.setBackground(Color.lightGray);
     
            // Panel
            drawArea = new JPanel(new BorderLayout());
            drawArea.setBackground(Color.WHITE);
            drawArea.setPreferredSize(new Dimension(540,0));
     
            // écouteurs
            drawArea.addMouseListener(this);
            drawArea.addMouseMotionListener(this);
     
            content.add(drawArea,BorderLayout.CENTER);
     
            // JColorChooser AllColors = new JColorChooser();
     
            g = getGraphics();
     
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            setVisible(true);
        }
     
        public void mousePressed(MouseEvent e){
            int x,y;
            x = e.getX();
            y = e.getY();
            x1=x; y1=y;
        }
     
        public void mouseDragged(MouseEvent e){
            int x,y;
            x = e.getX();
            y = e.getY();
            g.drawLine(x1, y1, x, y);
            this.x1=x; this.y1=y;
        }
     
        public void mouseEntered(MouseEvent event) {}  
        public void mouseMoved(MouseEvent evt){}
        public void mouseExited(MouseEvent evt){}
        public void mouseClicked(MouseEvent event){}
        public void mouseReleased(MouseEvent arg0) {}
    }

    code retouché à 16h25
    Je trouve toujours pas l'erreur

    Maintenant j'ai plusieurs messages d'erreur.
    L'application se lance mais ça dessine pas et j'ai les messages suivants.
    Si quelqu'un arrive à me décoder ça
    à part le fait qu'il y a une couille à la ligne 58 Merci

    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
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    	at Dessin.mouseDragged(Dessin.java:54)
    	at java.awt.Component.processMouseMotionEvent(Unknown Source)
    	at javax.swing.JComponent.processMouseMotionEvent(Unknown Source)
    	at java.awt.Component.processEvent(Unknown Source)
    	at java.awt.Container.processEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Window.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Points : 31
    Points
    31
    Par défaut
    J'pense qu'avec ce sujet j'ai du battre un record de chiantitude loool

    En changeant mes critères de recherche sur Google
    J'ai trouvé 5-6 pages qui parlaient "à peu près de ça"

    et j'ai essayé d'y adapter à mon code
    Bref, j'ai fait comme les "VRAIS" loool
    J'ai finalement trouvé une moitié de solution.

    Mais maintenant j'ai 2-3 autres soucis (que je vais essayer de chercher à régler) mais y en a un que j'arrive vraiment pas à régler.
    Je suis débutant (3 mois de JAVA, 3 semaines de SWING)
    et je peux vous dire que j'ai cherché pendant 1h, mais ça ne me saute pas aux yeux. Je vous explique :

    - J'ai un décalage quand je dessine, qui correspond à ma barre de titre de ma frame. J'ai essayé plusieurs petits trucs sans résultat. J'ai évidemment regardé sur google et sur d'autres sujets ici sur dev.net, mais ça m'énerve un peu, y a des utilisateurs, ils arrivent à trouver une solution à leur problème mais ils repostent pas la solution derrière... Bref.





    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
    import java.awt.*;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
    import javax.swing.*;
     
    public class Dessin extends JFrame implements MouseListener, MouseMotionListener {
        private JPanel drawArea;
        private int x1, y1;
        Graphics g;
     
        public Dessin() {
            //titre de la fenetre
            super("Mon titre bidon pour l'instant");
            this.setSize(new Dimension(650,500));
            this.setResizable(false);
            this.setLocationRelativeTo(null);
     
            // Container
            Container content = getContentPane();
            content.setBackground(Color.lightGray);
     
            // Panel
            drawArea = new JPanel(new BorderLayout());
            drawArea.setBackground(Color.WHITE);
            drawArea.setPreferredSize(new Dimension(540,0));
     
            // écouteurs
            drawArea.addMouseListener(this);
            drawArea.addMouseMotionListener(this);
     
            content.add(drawArea,BorderLayout.CENTER);
     
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            setVisible(true);
        }
     
        public void mousePressed(MouseEvent e){
            int x,y;
            x = e.getX();
            y = e.getY();
            x1=x; y1=y;
        }
     
        //événement déplacement souris avec bouton enfoncé
    	public void mouseDragged(MouseEvent e){
    		Graphics g = getGraphics();
    		g.drawLine(this.x1, this.y1, e.getX(), e.getY());
    		mouseMoved(e);
    	}
     
    	//événement lors du déplacement de la souris
    	public void mouseMoved(MouseEvent e){
    		this.x1 = e.getX();
    		this.y1 = e.getY();
    	}
     
        public void mouseEntered(MouseEvent event) {}  
        public void mouseExited(MouseEvent evt){}
        public void mouseClicked(MouseEvent event){}
    	public void mouseReleased(MouseEvent arg0) {}
    }





    Merci si qqn a un début de solution, ou même la solution car je sèche.

  8. #8
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Rien de vraiment dramatique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        //événement déplacement souris avec bouton enfoncé
    	public void mouseDragged(MouseEvent e){
     
    		Graphics g = getGraphics();//A remplasser par drawArea.getGraphics();
    		g.drawLine(this.x1, this.y1, e.getX(), e.getY());
    		mouseMoved(e);
    	}
    Tu as une écoute sur ton panel mais tu dessine sur ta fenêtre. Et puisque le point d'origine de ton panel n'est pas le même que celui de ta fenêtre... Il y a forcement un décalage.

    Il suffit donc de dessiner dans ton panel et non dans ta fenêtre

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Points : 31
    Points
    31
    Par défaut
    Merci Ivelios
    J'étais vraiment bloqué.

    J'connais pas encore bien toutes les subtilités dans ce genre.
    Merci allé, je place le sujet en résolu...

  10. #10
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par Ivelios Voir le message
    Rien de vraiment dramatique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        //événement déplacement souris avec bouton enfoncé
        public void mouseDragged(MouseEvent e){
     
            Graphics g = getGraphics();//A remplasser par drawArea.getGraphics();
            g.drawLine(this.x1, this.y1, e.getX(), e.getY());
            mouseMoved(e);
        }
    Tu as une écoute sur ton panel mais tu dessine sur ta fenêtre. Et puisque le point d'origine de ton panel n'est pas le même que celui de ta fenêtre... Il y a forcement un décalage.

    Il suffit donc de dessiner dans ton panel et non dans ta fenêtre
    GetGraphics pour dessiner sur un composant c'est MAAAAAAAAAAL et surtout ça fait quelque chose qui ne restera en place que jusqu'au prochain repaint.

    La bonne manière de faire est de redéfinir la méthode paintComponent d'une classe héritant de JComponent (ou JPanel) et d'utiliser les graphics fournis en paramètre pour dessiner.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par sinok Voir le message
    GetGraphics pour dessiner sur un composant c'est MAAAAAAAAAAL et surtout ça fait quelque chose qui ne restera en place que jusqu'au prochain repaint.

    La bonne manière de faire est de redéfinir la méthode paintComponent d'une classe héritant de JComponent (ou JPanel) et d'utiliser les graphics fournis en paramètre pour dessiner.
    Au fait dans mon exercice, il fallait que ça ne se repeigne pas.
    C'est seulement dans l'exercice suivant ou je vais devoir utiliser le repaint, le paintComponent et les BufferedImage...

    Bref, merci à vous

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

Discussions similaires

  1. Dessiner avec ma souris dans une fenêtre
    Par stoneyanick dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 17/04/2015, 11h37
  2. [Débutant] Gestion du deplacement souris mais avec ecran tactile
    Par mathrix77 dans le forum VB.NET
    Réponses: 0
    Dernier message: 12/05/2014, 15h26
  3. Évènement lié au click avec la souris
    Par hockey123 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 16/11/2010, 04h31
  4. Réponses: 4
    Dernier message: 10/09/2006, 19h06

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