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 :

Comment dessiner une flèche ?


Sujet :

2D Java

  1. #1
    Membre averti Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Points : 307
    Points
    307
    Par défaut Comment dessiner une flèche ?
    Salut.

    Je souhaite savoir s'il existe des API pour dessiner des flèches (pour représenter un graphe par exemple).

    Merci.

  2. #2
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Pour représenter un graphe.... Ca dépend de ce que tu veux faire réellement mais tu peux utiliser jfreechart pour les graphes.

    Sinon tu peux très bien la dessiner toi-même en sous classant la classe JComponent.

    Précise dans quelle voie tu comptes te diriger et ensuite on pourra t'aider si tu as encore des questions.

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 860
    Points : 22 900
    Points
    22 900
    Billets dans le blog
    51
    Par défaut
    Pas pour une fleche de base, pas JComponent, Shape. Il est assez facile de determine une fleche comme etant deux points (ou plus si on considere la fleche comme un ligne brisee) auxquels sont associes une tete de fleche et une queue de fleche. Ensuite, il est simple de dessiner la tete et la queue a l'horizontale et donc d'effectuer les transformations (rotation) appropriees pour les dessiner dans n'importe quel sens en fonction des points de la fleche).

    Un truc du genre :

    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
    public interface Arrow extends Shape {
      /** Gets the first point of the arrow.
       * @return A <code>Point2D</code> copy of the start point, never <code>null</code>.
       */
      public Point2D getStart();
     
      /** Gets the last point of the arrow.
       * @return A <code>Point2D</code> copy of the end point, never <code>null</code>.
       */
      public Point2D getEnd();
     
      /** Gets the tail object of the arrow.
       * <br>The tail usually sits on the first point of the arrow.  
       * @return An <code>ArrowTail</code> instance ; maybe <code>null</code>
       */
      public ArrowTail getTail();
     
      /** Gets the head object of the arrow.
       * <br>The head usually sits on the last point of the arrow.
       * @return An <code>ArrowHead</code> instance ; maybe <code>null</code>
       */
      public ArrowHead getHead();
    }
     
    public interface ArrowHead extends Shape {
    }
     
    public interface ArrowTail extends Shape {
    }
     
    public class DefaultArrow implements Arrow {
      private List<Point2D> pointList = new LinkedList();
      private ArrowHead head;
      private ArrowTail tail;
      private GeneralPath delegate = new GeneralPath();
     
      public DefaultArrow() {
        pointList.add(new Point());
        pointList.add(new Point());
        head = new DefaultArrowHead();
        tail = new DefaultArrowTail();
        recalculateGeometry();    
      }
     
      ////////////////////////
      // Shape interface. //
      ////////////////////////
      // We delegate everything to the included GeneralPath object.
     
      /** @inheritDoc.
      */
      public Rectangle getBounds() {
        return delegate.getBounds();
      } 
     
      /** @inheritDoc.
      */
      public Rectangle2D getBounds2D() {
        return delegate.getBounds2D();
      } 
     
      [...]
     
      ////////////////////////
      // Arrow interface. //
      ////////////////////////
     
      /** @inheritDoc.
      */
      public Point2D getStart() {
        return pointList.get(0).clone();
      }
     
      /** @inheritDoc.
      */
      public Point2D getEnd() {
        return pointList.get(pointList.size()-1).clone();
      }
     
      [...]
     
      //////////////////////
      // Own methods. //
      //////////////////////
     
      public void setArrowHead(ArrowHead head) {
        this.head = head;
        recalculateGeometry();
      }
     
      [...]
     
      private recalculateGeometry() {
        delegate.reset();
        int pointNumber = pointList.size();
        for (int i = 0 ; i < pointNumber ; i++) {
          Point2D p = pointList.get(i);
          if (i == 0) {
            delegate.moveTo(p.getX(), p.getY());
          } 
          else {
            delegate.lineTo(p.getX(), p.getY());
          }
        }
        if (tail != null) {
          Point2D p = getStart();
          /** @todo calculate angle of the first segment. */
          AffineTransform t = new AffineTranform();
          t.translate(p.getX(), p.getY());
          t.rotate(angle);
          // We suppose the origin (0, 0) of this shape is where the tail/start point is supposed to be.
          Shape s = t.transform(tail);
          delegate.append(s);
        }
        if (head != null) {
          Point2D p = getEnd();
          /** @todo calculate angle of the last segment. */
          AffineTransform t = new AffineTranform();
          t.translate(p.getX(), p.getY());
          t.rotate(angle);
          // We suppose the origin (0, 0) of this shape is where the head/end point is supposed to be.
          Shape s = t.transform(head);
          delegate.append(s);
        }
      }
    }
    Note : pre-Java6, GeneralPath n'accepte que des float en argument.

  4. #4
    Membre averti Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Points : 307
    Points
    307
    Par défaut
    Merci pour vos réponses.

    Ce que je veux exactement est d'offrir à l'utilisateur des outils pour dessiner un reseau de Petri, puis extrair des information à partir du dessin.

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 860
    Points : 22 900
    Points
    22 900
    Billets dans le blog
    51
    Par défaut
    Tu confond la representation et la donnee. Ton dessin ne sera qu'une representation (possible parmis plusieurs) de ton reseau de petri (le modele/document) qui lui peut-etre constitue de simples classes/structures ou des donnees XML ou autre. Quand tu inseres/supprime des places et transitions sur ta zone de dessin via ton editeur en fait tu rajoutes/eleves les entites equivalentes dans le modele ce qui provoquera une mise-a-jour de la vue, mais je m'egare (mieux vaut avoir un topic dedie pour ce genre de choses, voir aussi MVC).

Discussions similaires

  1. [Swing][Graphics2D] dessiner une flèche
    Par Galima dans le forum 2D
    Réponses: 13
    Dernier message: 03/12/2011, 23h31
  2. Le bout d'une barbe ou comment dessiner une flèche
    Par ptyxs dans le forum Mathématiques
    Réponses: 23
    Dernier message: 14/04/2009, 11h05
  3. Comment dessiner une fléche comme ceci ?
    Par jlassiramzy dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 24/04/2007, 02h57
  4. Comment dessiner une ligne dans un Chart ?
    Par libititi dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2005, 14h56

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