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 :

[Java2D] Dessiner un rectangle à la souris


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut [Java2D] Dessiner un rectangle à la souris
    Bonjour

    Question assez bête.
    Je veux dessiner sur un JPanel un rectangle à la souris.
    Or, si mes valeurs width et/ou height de mon rectangle sont négatives, je n'ai pas de dessin. Comment résoudre ce problème ?
    Voici mon code:
    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
     
    public class MyGLCanvas extends /*GLCanvas*/JPanel implements MouseListener, MouseMotionListener {
     
        private Point start,  end;
     
        public MyGLCanvas() {
            super();
            this.setBackground(Color.WHITE);
            this.addMouseListener(this);
            this.addMouseMotionListener(this);
        }
     
        @Override
        public void paint(Graphics g) {
            Graphics2D g2d = (Graphics2D)g;
            g2d.setColor(Color.BLACK);
            if(start!=null && end!=null){
                g2d.clearRect(0, 0, this.getWidth(), this.getHeight());
                Rectangle r = new Rectangle();
                Point S = start;
     
                int width = end.x-start.x;
                int height = end.y-start.y;
     
                r.setLocation(S);
                r.setSize(new Dimension(width, height));
                g2d.drawRect(start.x, start.y, width, height);
            }
            else
                g2d.clearRect(0, 0, this.getWidth(), this.getHeight());
        }
     
        public void mouseClicked(MouseEvent arg0) {
        }
     
        public void mousePressed(MouseEvent arg0) {
            if(start == null)
                start = arg0.getPoint();
        }
     
        public void mouseReleased(MouseEvent arg0) {
            start = end = null;
            repaint();
        }
     
        public void mouseEntered(MouseEvent arg0) {
        }
     
        public void mouseExited(MouseEvent arg0) {
        }
     
        public void mouseDragged(MouseEvent arg0) {
            if (start != null) {
                end = arg0.getPoint();
                repaint();
            }
        }
     
        public void mouseMoved(MouseEvent arg0) {
        }
    }
    Merci d'avance.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Tu décales l'origine x,y en fonction des valeurs de width et/ou height pour ensuite pouvoir utiliser des valeurs positives.

    Ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x = 10
    y = 20
    width = -5
    height = 10
    =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x = 10 - 5 = 5
    y = 20
    width = 5
    height = 10

  3. #3
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut
    Ok, merci natha, je vais essayer.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  4. #4
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut
    Hmmm, sans doute je m'y suis mal pris:
    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
     
        @Override
        public void paint(Graphics g) {
            Graphics2D g2d = (Graphics2D)g;
            g2d.setColor(Color.BLACK);
            if(start!=null && end!=null){
                g2d.clearRect(0, 0, this.getWidth(), this.getHeight());
                Rectangle r = new Rectangle();
                Point S = start;
     
                int width = end.x-start.x;
                int height = end.y-start.y;
     
                if(width<0){
                    S.x = S.x+width;
                    width = -width;
                }
                if(height<0){
                    S.y = S.y+height;
                    height = -height;
                }
     
                r.setLocation(S);
                r.setSize(new Dimension(width, height));
                g2d.drawRect(S.x, S.y, width, height);
            }
            else
                g2d.clearRect(0, 0, this.getWidth(), this.getHeight());
        }
    Ce qui fait que mon rectangle se réduit à suivre le pointeur de ma souris

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  5. #5
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Normal, tu changes ton point d'origine start.
    Il faut juste que tu change le point de dessin et pas le point d'origine du clic de la souris.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Point S = new Point(start.x, start.y);

  6. #6
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut
    Merveilleux
    Merci natha

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 13/10/2005, 15h00
  2. Dessiner un rectangle sur une forme
    Par Neo41 dans le forum MFC
    Réponses: 6
    Dernier message: 13/08/2005, 01h08
  3. [VB.NET] Dessiner plusieurs rectangles.
    Par Emcy dans le forum Windows Forms
    Réponses: 9
    Dernier message: 23/03/2005, 16h57
  4. [FLASH MX2004] Rectangle suivant souris...
    Par mohican13 dans le forum Flash
    Réponses: 3
    Dernier message: 25/02/2005, 16h58
  5. Dessiner un rectangle avec bords et texte ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 17h17

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