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

AWT/Swing Java Discussion :

Vitesse de déplacement lors d'un drag'n'drop


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2014
    Messages : 57
    Points : 93
    Points
    93
    Par défaut Vitesse de déplacement lors d'un drag'n'drop
    Bonjour,

    Je me suis récemment mis en tête de faire une sorte de Paint en Swing, à la base pour travailler la détection de contours, le remplissage de surface fermée etc, mais finalement c'est un problème bien différent que je rencontre. En effet, quand je déplace la souris très lentement en mode tracé, ça trace niquel mais si je vais à peine plus vite les points commencent à s'espacer, et c'est encore bien pire quand j'accélère le rythme.

    Actuellement, voici ce que fait ma méthode mouseDragged (elle appelle simplement la méthode 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
     
     private void paintPencil(Point p) {
            pencilHeight   = pencilSize.getValue();
            pencilWidth    = pencilSize.getValue();
     
            Color color     = pencilColorVar;
            Shape shape  = null;
     
            if(pencilShape.getSelectedItem().equals("Rond"))
            	shape = new Ellipse2D.Float(p.x,p.y,pencilWidth,pencilHeight);
             else if(pencilShape.getSelectedItem().equals("Carré"))          
                shape = new Rectangle(p.x,p.y,pencilWidth,pencilHeight);
     
            if (shape != null)
            	shapes.add(new Couple<Color,Shape>(color,shape));
            repaint();				
    }
    Je suis en train de me demander si je ne devrais pas en réalité stocker le précédent Point pPrev sur lequel a été appelé la méthode, puis de tracer la totalité des points du segment [pPrev, p]. Bien sûr il faudrait dans ce cas utiliser un booléen modifié par mouseReleased histoire de ne pas faire ça sur deux drag'n'drop consécutifs différents. Est-ce que je suis sur la bonne voie d'après vous, ou y a-t-il mieux à faire ? J'ai utilisé des Shape au début mais ça n'était pas vraiment dans l'intention de tracer des courbes, c'était juste pour essayer un peu le dessin dans Swing, et je trouve que ça n'est pas très adapté, dois-je m'en débarrasser ?

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2014
    Messages : 57
    Points : 93
    Points
    93
    Par défaut
    Après modification comme indiqué, ça donne ça au niveau du 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
     
    private void paintPencil(Point p) {        
            Color color  = pencilColor;               
            if (lastDragged != null)
            	segments.add(new Segment(lastDragged,p,color,thickness));
     
            lastDragged = p;
            repaint();				
    }
     
        @Override
    public void paintComponent(Graphics g) {
            Graphics2D g2d = (Graphics2D) g;
            super.paintComponent(g2d);
     
            for (Segment segment : segments) {
            	g2d.setStroke(new BasicStroke(segment.getThickness()));
            	g2d.setColor(segment.getColor());
            	Point p0 = segment.getP0();
            	Point p1 = segment.getP1();
            	g2d.drawLine(p0.x,p0.y,p1.x,p1.y);
            }
    }
    Ca fonctionne pas mal mais quand le pinceau est très large et qu'on fait des virages on voit clairement des "carrés en rotation" :

    Nom : Image sans titre.png
Affichages : 86
Taille : 4,0 Ko

    Vous avez une meilleure solution, ou un moyen d'affiner celle-ci ?

Discussions similaires

  1. Replacer les noeuds lors d'un drag and drop
    Par maloups dans le forum Composants
    Réponses: 1
    Dernier message: 19/09/2009, 14h44
  2. Réponses: 0
    Dernier message: 24/04/2009, 13h39
  3. [JList] afficher un menu lors d'un drag and drop
    Par skyangel dans le forum Composants
    Réponses: 4
    Dernier message: 12/03/2008, 15h16
  4. Réponses: 4
    Dernier message: 01/10/2005, 11h03

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