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 :

Déplacement d'un fillOval avec java.awt.Graphics


Sujet :

2D Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Points : 11
    Points
    11
    Par défaut Déplacement d'un fillOval avec java.awt.Graphics
    Bonjour. C'est la première fois que j'écris dans un forum, donc excuser moi si je fais des erreurs. Je ne sais pas si une réponse à ma question existe déja, donc je ne sais pas non plus où chercher.

    Mon problème est le suivant : dans un JPanel, je voudrais déplacer une ellipse (crée avec la méthode fillOval de la classe Graphics) de sa position de départ (disons x0, y0) jusqu'à l'endroit ou j'ai cliqué sur l'écran avec ma souris (disons x_clic, y_clic). Ce déplacement devant se faire de manière rectiligne, le plus simple aurait été de calculer la pente de la droite passant par ces deux points (p = (y_clic - y0)/(x_clic - x0).

    Ensuite avec une boucle, à chaque fois que j'incrémente la coordonnée en x de 1, j'incrémente celle en y de p

    mais le problème c'est que g.fillOval prend des paramètres entier. je n'ai donc pas le choix de faire un cast sur mon rapport p et ainsi perdre de la précision.

    Au final, je me rend compte que l'ellipse ne passe pas exactement par le point désiré.

    Quelqu'un a-t-il une solution ? Merci d'avance

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Utilise plutôt une Ellipse2D.Double et des Graphics2D



    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
    package org.sca.test.swing.graphics;
     
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.RenderingHints;
    import java.awt.geom.Ellipse2D;
     
    import javax.swing.JComponent;
    import javax.swing.JFrame;
     
    public class OvalTest extends JComponent{
        private Ellipse2D circle = new Ellipse2D.Double(102.57, 26.8, 42.8, 42.8);
     
        @Override
        protected void paintComponent(Graphics g) {
            // TODO Auto-generated method stub
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g.create();
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g2d.setPaint(Color.darkGray);
            g2d.fill(circle);
            g2d.dispose();
        }
     
        public static void main(String[] args) {
            JFrame f = new JFrame();
            f.add(new OvalTest());
            f.setSize(400, 300);
            f.setLocationRelativeTo(null);
     
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            f.setVisible(true);
        }
    }
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Merci !!

  4. #4
    Membre éprouvé Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 842
    Points : 983
    Points
    983
    Par défaut
    Juste une petite remarque en passant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    JFrame f = new JFrame();
    f.add(new OvalTest());
    f.setSize(400, 300);
    f.setLocationRelativeTo(null);
     
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    f.setVisible(true);
    Ce bloc de codes situé dans le main ne devrait-il pas être soumis à l'EDT ?
    .
    Diviser c'est régner : United we stand, Divided we fall
    .

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    En théorie, oui bien sur, mais en pratique Swing (et AWT) n'a jamais été très regardant sur ce genre d'initialisation et, historiquement, une bonne partie des didacticiels Sun/Oracle contiennent ce genre de code (oui eux aussi ils écrivent -souvent- mal ou ne mettent pas en pratique leurs propres conseils).

    Ça reste cependant une bonne pratique pour les débutants que de se forcer a faire les initialisations dans l'EDT.

    Cependant, était-ce vraiment nécessaire de ressusciter un sujet de 2012 ?
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

Discussions similaires

  1. Plateau d'Hexagones avec Java.awt et Java.swing
    Par Arketran dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 03/03/2014, 16h34
  2. problème avec java.awt.Desktop.getDesktop().browse
    Par jmmaugis dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 27/03/2012, 16h58
  3. Effets indésirables avec java.awt.Robot
    Par LGnord dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 20/08/2008, 14h34
  4. Réponses: 3
    Dernier message: 19/01/2008, 01h15
  5. [JNDI] Equivalent avec Java Web Start ?
    Par cameleon2002 dans le forum Java EE
    Réponses: 8
    Dernier message: 18/09/2003, 18h55

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