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

2D Java Discussion :

Dessin et MouseListener


Sujet :

2D Java

  1. #1
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut Dessin et MouseListener
    j'ai un dessin sur mon JPanel et je veux pouvoir le deplacer a la facon d'une icone.

    est ce possible dajouter un mouseListener a un dessin ? le dessin est un rectangle banal ..

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    tu ajoutera le mouselistener au panneau.

    au moment d'un clique de souris, tu test si la souris est dans ton rectangle, si oui sur un mouvement mouseDragged tu deplace le rectangle.

  3. #3
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut
    oki je regarde ca ... merci

  4. #4
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut
    jessaye d'obtenir le coordonnées lorsque je clique sur MonPanel de la facon suivante :
    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
    public class MonPanel extends JPanel implements MouseListener{
        
           
        CollectionEntite c;
     
        /** Creates a new instance of MonPanel */
        public MonPanel(CollectionEntite c) {
           
            new BorderLayout(); 
            this.c=c;
            this.setLayout(null);// On applique le layout
            this.setBackground(Color.lightGray);//couleur de fond
            this.setBorder(new EtchedBorder(50,Color.black,Color.white));
      }
      
        
        public void paintComponent(Graphics g) 
        {
           super.paintComponent(g);
        // Appel de la méthode paintComponent de la classe mère 
      
    bla bla bla
    }
    
        public void mouseClicked(MouseEvent e) {       
            System.out.println(e.getX() +" et " + e.getY());
        }
    
        public void mousePressed(MouseEvent e) {
        }
    
        public void mouseReleased(MouseEvent e) {
        }
    
        public void mouseEntered(MouseEvent e) {
        }
    
        public void mouseExited(MouseEvent e) {
        }
    
     
      
    }



    mais ca ne fonctionne pas ... pourquoi ?

  5. #5
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut
    javé oublié le this.addMouseListener(this);


    oups ...

  6. #6
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut
    bah voila maintenant je recupere le dessin a deplacer :

    lorsque je clique sur mon dessin ( un tit rectangle ) je recupere l'objet associé au dessin ou je dois modifier deux champs :
    - positionX
    - positionY
    par le meme temps j'initialise un boolean "cliké" a true pour pouvoir l'utiliser dans mon MouseDragged

    seulment je n'ai jamais utiliser MouseDragged et pour linstant jai fait ceci mais ca ne 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
     
     public void mouseReleased(MouseEvent e) {
            cliké=false;
        }
     
    public void mouseDragged(MouseEvent e) {
            if (cliké==true)
            {//on modifie la position et on redessine l'object Ent
                Ent.positionX=e.getX();
                Ent.positionY=e.getY();
                repaint();
     
            }   
        }
     
        public void mouseClicked(MouseEvent e) {
            Point point = new Point(e.getX(),e.getY());
     
            try {
                Ent = Appartient(point);// on recupere lentité sur lakel on a cliké 
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
           if ( Ent!=null)
           {
                System.out.println("tu as cliké dans :"+Ent.Titre);
                cliké=true;
           }
        }

  7. #7
    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
    heu... j'ai l'impression que tu te complique bien la vie... désolé, je peux pas poster mon code source ce soir mais je me rappelle pas m'etre servi de booleens pour faire mon truc: j'ai utilisé deux variables int oldX et oldY pour stocker l'ancien emplacement et à chaque mousedraged je fais un setlocation(originex+posx-oldx, idem pour y) ou un truc du genre...

  8. #8
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut
    comment efface ton un dessin ?

  9. #9
    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
    G.clearRect(. . . .);

  10. #10
    Membre actif
    Avatar de Ecosmose
    Homme Profil pro
    Archi SI / Soft / Réseau / SCADA /Automate
    Inscrit en
    Janvier 2007
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Archi SI / Soft / Réseau / SCADA /Automate
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 170
    Points : 214
    Points
    214
    Par défaut
    normalement le plus propre est d'utilisé un XORmode afin de voir le fond de ton arrière plan et de ton image...



    pour remettre l'image et avancé sa 'trainé' il suffit de faire un XORmode dplus avant de redessiner (et donc avant de calculer les nouvelles coordonnées de déplacement)

    tu peux aussi gérer le drag & drop de tel ou tel bouton (drag & drop = glisser / déposer)

    public void mouseDragged(MouseEvent arg0) {
    // TODO Raccord de méthode auto-généré
    if ( SwingUtilities.isLeftMouseButton (arg0) )
    {
    //code
    }

  11. #11
    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
    Bon, je met toujours mon code, sait on jamais ^^ !

    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
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
     
    package horlogeprog;
     
    public class horloge extends java.awt.Canvas implements Runnable{
        private static final long serialVersionUID=0L;
     
        private static int centreX;
        private static int centreY;
        private static int largeur;
        private static int hauteur;
     
        private static int Heures;
        private static int Minutes;
        private static int Secondes;
        //éléments de l'interface graphique
        private static javax.swing.JFrame FRAfen;
        private static javax.swing.JPanel PANint;
        private static javax.swing.JTextField JTFheure;
        //éléments pour refresh des aiguilles
        private java.text.SimpleDateFormat formadheure=new java.text.SimpleDateFormat();
        private java.util.Calendar calendrier;
        //Variables pour location de l'horloge sur le Canvas
        private static int lastx=1;
        private static int lasty=1;
     
        public horloge(){
            //Dessin de l'horloge dans une interface swing
            interfaceprog();
            //cadrage au centre
            centreX=FRAfen.getWidth()/2;
            centreY=FRAfen.getHeight()/2;
            //mise en route du thread
            new Thread(this, "Aiguilles").start();
            //ajout des Listeners
            this.addMouseListener(new java.awt.event.MouseAdapter() {
                public void mousePressed(java.awt.event.MouseEvent e) {
                    if(e.getX()<=300&&e.getY()<=300){
                        setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
                        lastx=e.getX();
                        lasty=e.getY();} else{lastx=lasty=0;}
                }
                public void mouseReleased(java.awt.event.MouseEvent e){
                    if(e.getX()<=300&&e.getY()<=300)
                        setCursor(new java.awt.Cursor(java.awt.Cursor.MOVE_CURSOR));
                    else setCursor(new java.awt.Cursor(java.awt.Cursor.CROSSHAIR_CURSOR));
                }
            });
            this.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
                public void mouseDragged(java.awt.event.MouseEvent e) {
                    setLocation(getLocation().x+e.getX()-lastx,getLocation().y+e.getY()-lasty);
                }
                public void mouseMoved(java.awt.event.MouseEvent e) {
                    if(e.getX()<=300&&e.getY()<=300)
                        setCursor(new java.awt.Cursor(java.awt.Cursor.MOVE_CURSOR));
                    else setCursor(new java.awt.Cursor(java.awt.Cursor.CROSSHAIR_CURSOR));
                }
            });
        }
     
        //Implementation de Runnable
        public void run() {
            while(true){
                //Obtention de la nouvelle date
                calendrier = java.util.Calendar.getInstance();
                //Mise à jour du contenu du text Field
                java.util.Date dateactuelle=calendrier.getTime();
                formadheure.applyPattern("EEEE dd MMMM yyyy hh:mm:ss");
                JTFheure.setText(formadheure.format(dateactuelle));
                //Repaint des aiguilles avec de nouvelles valeurs pour heure, minute et seconde
                Secondes=calendrier.get(java.util.Calendar.SECOND);
                Minutes=calendrier.get(java.util.Calendar.MINUTE);
                Heures=calendrier.get(java.util.Calendar.HOUR);
                repaint();
                //sleep pour libérer CPU
                try{Thread.sleep(1000);}catch(InterruptedException ex){ex.printStackTrace();}
            }
        }
     
        private void interfaceprog(){
            //FRAfen=FRAMEfenêtre
            FRAfen=new javax.swing.JFrame("Horloge atomique faite maison :p :");
            FRAfen.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
            FRAfen.setSize(300,300);
            FRAfen.setLocationByPlatform(true);
            FRAfen.getToolkit().setDynamicLayout(true);
            try {javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());
            javax.swing.SwingUtilities.updateComponentTreeUI(FRAfen);
            } catch (Exception ex) {ex.printStackTrace();}
            FRAfen.setCursor(new java.awt.Cursor(java.awt.Cursor.CROSSHAIR_CURSOR));
            //PANint=PANEL intérieur fenêtre
            PANint=new javax.swing.JPanel(new java.awt.BorderLayout());
            //JTFheure=TEXTFIELD contenant la date et l'heure
            JTFheure=new javax.swing.JTextField("Chargement en cours...");
            JTFheure.setHorizontalAlignment(javax.swing.JTextField.CENTER);
            JTFheure.setEnabled(false);
     
            PANint.add(JTFheure, "North");
            PANint.add(this, "Center");
     
            FRAfen.add(PANint, "Center");
     
            FRAfen.setVisible(true);
        }
     
        public void paint(java.awt.Graphics g){
            cadran(g);
            chiffres(g);
            aiguilles(g);
        }
     
        public static void cadran(java.awt.Graphics g){
            g.setColor(java.awt.Color.blue);
            g.drawOval(centreX-95,centreY-95, 190, 190);//Cadran interne
            g.drawOval(centreX-110, centreY-110, 220, 220);//Cadran externe
            g.setColor(java.awt.Color.yellow);
            for(int i=0;i<10;i++) //Motif du cadran
                g.drawOval((centreX-100)-i, (centreY-100)+i, 200+2*i, 200-2*i);//Cadre fashion
            g.setColor(java.awt.Color.black);
            g.fillOval(centreX-5, centreY-5, 10, 10);//Centre aiguilles
        }
     
        public static void chiffres(java.awt.Graphics g){
            //--------Minutes
            g.drawString("60", centreX-5, centreY-100);
            g.drawString("15", centreX+100-5, centreY);
            g.drawString("30", centreX-7, centreY+110);
            g.drawString("45", centreX-100-10, centreY);
            //---------Heures
            g.setColor(java.awt.Color.red);
            g.setFont(new java.awt.Font("Comic sans ms", java.awt.Font.BOLD,15));
            g.drawString("12", centreX-10, centreY-120);
            g.drawString("3", centreX+120-5, centreY);
            g.drawString("6", centreX-7, centreY+130);
            g.drawString("9", centreX-120-10, centreY);
        }
     
        public static void aiguilles(java.awt.Graphics g){
            //SECONDES//
            g.setColor(java.awt.Color.black);
            int xsecondes=(int)(110*(Math.sin((-(Secondes-30)*6*Math.PI)/180))+centreX);
            int ysecondes=(int)(110*(Math.cos((-(Secondes-30)*6*Math.PI)/180))+centreX);
            g.drawLine(centreX, centreY, xsecondes, ysecondes);
            //MINUTES//
            g.setColor(java.awt.Color.blue);
            int xminutes=(int)(90*(Math.sin((-(Minutes-30)*6*Math.PI)/180))+centreX);
            int yminutes=(int)(90*(Math.cos((-(Minutes-30)*6*Math.PI)/180))+centreX);
            g.drawLine(centreX, centreY, xminutes, yminutes);
            //HEURES//
            g.setColor(java.awt.Color.red);
            int xheures=(int)(70*(Math.sin((-(Heures-30)*30*Math.PI)/180))+centreX);
            int yheures=(int)(70*(Math.cos((-(Heures-30)*30*Math.PI)/180))+centreX);
            g.drawLine(centreX, centreY, xheures, yheures);
        }
     
        public static void main(String[]args){
            new horloge();
        }
     
    }

Discussions similaires

  1. [Graphic] Dessiner des hachures
    Par sylverspoon dans le forum 2D
    Réponses: 7
    Dernier message: 22/03/2006, 21h46
  2. [ALGO] dessiner un triangle dans le bon sens
    Par lefait dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 05/02/2005, 14h38
  3. moteur de particules :Dessiner un point
    Par houssa dans le forum OpenGL
    Réponses: 2
    Dernier message: 25/06/2003, 22h13
  4. Dessiner un rectangle avec bords et texte ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 17h17
  5. Réponses: 3
    Dernier message: 12/06/2002, 19h03

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