Dessiner de l'uml en java .....

Dessiner de l'uml en java ..... - Java - Programmation

Marsh Posté le 28-02-2005 à 18:55:48    

Bonjour à tous.  
Je voudrais faire une petite appli en java dont le but est de dessiner des diagrammes de classes uml dans le genre de argouml http://www-igm.univ-mlv.fr/~dr/XPO [...] rgoUML.htm mais en plus simplifié ...
Et j'aurai aimez savoir si il n'y aurai pas des composants java qui pourrai m'aider a le faire parce que avec des drawrect et des drawstring ca me parrait mal engagé  :pt1cable:  
Je sais pas si j'ai été clair mais si vous pouviez m'aider ca serai sympa :) help me ...  :)

Reply

Marsh Posté le 28-02-2005 à 18:55:48   

Reply

Marsh Posté le 28-02-2005 à 19:25:15    

Bah les composants, faut les faire toi-même, avec des drawrect et drawstring :)

Reply

Marsh Posté le 28-02-2005 à 19:31:08    

argggggg c ce que j'ai commencé a faire mais je pensais qu'il y avait peu etre plus simple ....  
Pour dessiner une classe je fais un rectangle puis je dessine les attributs avec des drawstring ect ... mais le probleme c'est pour la saisie des attribut alors à part en faisant cela avec des menus déroulants j'ai du mal a voir ...


Message édité par rital_5_4 le 28-02-2005 à 19:31:49
Reply

Marsh Posté le 28-02-2005 à 19:32:07    

Voilà, tu fais une classe genre "boiboite", avec deux-trois variables genre nom, liste des attributs, etc... Après les méthodes pour dessiner sur un objet Graphics2D

Reply

Marsh Posté le 28-02-2005 à 19:43:49    

oui ba c pas gagné :s j'étais persuadé qu'il y avait quelque chose d'autres personnes n'aurai d'autres idée ?? svp ...

Reply

Marsh Posté le 28-02-2005 à 20:45:26    

alors personne n'a d'idées c'est bien dommage :'(

Reply

Marsh Posté le 28-02-2005 à 20:49:13    

Ben suis mon idée, y'en a pas d'autres, et au moins t'aura la fierté d'avoir fait ton truc de A à Z :D

Reply

Marsh Posté le 28-02-2005 à 20:53:32    

A vu de nez ça a l'air pas trop dur.
La difficulté c'est la gestion automatique de l'agencement des tes classes.  
A la limite par defaut tu les mets les une à coté des autres et tu offres la possibilité de sauvarder l'agencement manuel.
ps : T'es à la fac de Marne La Vallée ?

Reply

Marsh Posté le 28-02-2005 à 21:01:15    

non je suis en iut informatique sur nancy

Reply

Marsh Posté le 28-02-2005 à 21:03:09    

Le plus dur est effectivement l'agencement automatique. Après c'est juste du dessin :)

Reply

Marsh Posté le 28-02-2005 à 21:03:09   

Reply

Marsh Posté le 28-02-2005 à 21:10:37    

l'edition du nom des attributs directement sur le graphique c'est pas si simple non plus, de même pour la sélection, glisser/deposer et cie.

Reply

Marsh Posté le 28-02-2005 à 21:12:28    

rital_5_4 a écrit :

non je suis en iut informatique sur nancy


C'est vrai que pour un IUT ce n'est pas hyper trivial comme exo.
Vous devez faire de l'introspection pour créer les diagrammes ?

Reply

Marsh Posté le 28-02-2005 à 21:15:01    

heu c'est quoi que tu appel de l'introspection ??? :$
"l'edition du nom des attributs directement sur le graphique c'est pas si simple non plus" oui c'est l'un des problèmes également

Reply

Marsh Posté le 01-03-2005 à 07:42:06    

[:cupra]


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 01-03-2005 à 11:17:22    

salut
 
je bosse sur un soft de gestion d'emplois du temps avec des blocs à redimentionner à déplacer, magnétisé sur une grille et tout.
 
Moi j'ai décidé de faire tout à la main, mais c'est vrai que j'ai pas à faire d'entrée texte sur mon canvas.. ça c'est ce qui me parraît le plus relou.
 
Si je peux t'aider, voilà ce que je me suis concocté (j'ai lutté un peu quand même)
c'est 2 fonctions qui affichent une chaîne de caractères dans un rectangle de taille quelconque.
 
Si le rectangle est pas au ratio, ça centre. Si le Graphics que tu passes est un graphics2D avec de l'anti aliasing, ce sera anti aliasé.
 
Désolé, c'est en français, c'est parce que je suis pas seul sur ce coup et ... enfin bon voilà. Et puis je sais pas si c'est vraiment optimisé mais ça marche.
 
voilà ce que je fais avec :  
http://tom.rethaller.free.fr/vrac/Opale_preview1.png
 
 

Code :
  1. public static void dessinerTexte(String texte, Font font, Graphics g,
  2.   float x, float y, float largeur, float hauteur) {
  3.  Graphics2D graph=(Graphics2D)g;
  4.  FontRenderContext frc=graph.getFontRenderContext();
  5.  GlyphVector gv=font.createGlyphVector(frc, texte.toCharArray());
  6.  Shape outline=gv.getOutline();
  7.  Rectangle2D mb=gv.getVisualBounds();
  8.  double sx=largeur/mb.getWidth();
  9.  double sy=hauteur/mb.getHeight();
  10.  double sc=Math.min(sx, sy);
  11.  AffineTransform sav=graph.getTransform();
  12.  AffineTransform tras=new AffineTransform();
  13.  tras.translate(-mb.getMinX()*sc, -mb.getMinY()*sc);
  14.  tras.scale(sc, sc);
  15.  Shape s=tras.createTransformedShape(outline);
  16.  tras=new AffineTransform();
  17.  if (sy>=sx) {
  18.   tras.translate(x, y+(hauteur-mb.getHeight()*sc)/2);
  19.  } else {
  20.   tras.translate(x+(largeur-mb.getWidth()*sc)/2, y);
  21.  }
  22.  graph.setTransform(tras);
  23.  graph.fill(s);
  24.  graph.setTransform(sav);
  25. }
  26. public static void dessinerTexteVertical(String texte, Font font,
  27.   Graphics g, float x, float y, float largeur, float hauteur) {
  28.  Graphics2D graph=(Graphics2D)g;
  29.  FontRenderContext frc=graph.getFontRenderContext();
  30.  GlyphVector gv=font.createGlyphVector(frc, texte.toCharArray());
  31.  Shape outline=gv.getOutline();
  32.  Rectangle2D mb=gv.getVisualBounds();
  33.  double sx=hauteur/mb.getWidth();
  34.  double sy=largeur/mb.getHeight();
  35.  double sc=Math.min(sx, sy);
  36.  AffineTransform sav=graph.getTransform();
  37.  AffineTransform tras=new AffineTransform();
  38.  tras.translate(-mb.getMinX()*sc, -mb.getMinY()*sc);
  39.  tras.scale(sc, sc);
  40.  Shape s=tras.createTransformedShape(outline);
  41.  tras=new AffineTransform();
  42.  if (sx>=sy) {
  43.   tras.translate(x, hauteur+y-(hauteur-mb.getWidth()*sc)/2);
  44.  } else {
  45.   tras.translate(x+(largeur-mb.getHeight()*sc)/2, hauteur+y);
  46.  }
  47.  tras.rotate(-Math.PI/2);
  48.  graph.setTransform(tras);
  49.  graph.fill(s);
  50.  graph.setTransform(sav);
  51. }


 
 
bon courage :D

Reply

Marsh Posté le 01-03-2005 à 11:27:18    

Chelou tes fonctions :??:

Reply

Marsh Posté le 01-03-2005 à 11:29:26    

FlorentG a écrit :

Chelou tes fonctions :??:


 
C'est le cas de le dire. En plus, elles sont statiques, ça me semble bien parti pour faire un design pas élégant ça :o


---------------
Moi, j'aime pas les signatures - J'écoute actuellement :
Reply

Marsh Posté le 01-03-2005 à 11:31:05    

Concrètement, elle fais quoi la fonction "dessinerTexte", par rapport à Graphics2D.drawString ?

Reply

Marsh Posté le 01-03-2005 à 19:37:32    

Merci pour le code. Alors moi ce que j'ai fait c'est que j'ai fait une classe MaClasse qui symbolise une classe dans le diagramme UML. La classe MaClasse derive de rectangle (pour le dessin) et contient des attributs Vector dans lequels je stocke les valeurs des attributs, méthodes que l'utilisateur ajoute dans la classe UML via l'interface.
J'ai ensuite defini la méthode paint avec des drawString des drawRect et des drawLignes (pour découpé mon rectangle). Jeparcours les listes et je fait des drawString au bon endroit pour afficher les attributs ect de la classe uml ... Bien sure il faut augmenter la taille du rectangle enfin il y a pas de trucs a gerer .. j'ai commencé a le faire seulement j'aimerai bien savoir si je suis bien partie ou alors si je me plante complement ...  
J'attends vos avis, j'espere que j'ai été a peu pres clair ...

Reply

Marsh Posté le 01-03-2005 à 19:50:03    

coffeeman a écrit :

C'est le cas de le dire. En plus, elles sont statiques, ça me semble bien parti pour faire un design pas élégant ça :o


 
 
c'est dans une class Utils, c'est des fonctions génériques qui servent à tout le monde, ça nécessite pas de sous-classer Graphics2D à mon goût...
 
 

FlorentG a écrit :

Concrètement, elle fais quoi la fonction "dessinerTexte", par rapport à Graphics2D.drawString ?


Citation :


 
 
drawString
 
public abstract void drawString(String s,
                                float x,
                                float y)
 
    Renders the text specified by the specified String, using the current text attribute state in the Graphics2D context. The baseline of the first character is at position (x, y) in the User Space. The rendering attributes applied include the Clip, Transform, Paint, Font and Composite attributes. For characters in script systems such as Hebrew and Arabic, the glyphs can be rendered from right to left, in which case the coordinate supplied is the location of the leftmost character on the baseline.
 
    Parameters:
        s - the String to be rendered
        x - the x coordinate of the location where the String should be rendered
        y - the y coordinate of the location where the String should be rendered  
    Throws:
        NullPointerException - if str is null
    See Also:
        setPaint(java.awt.Paint), Graphics.setColor(java.awt.Color), Graphics.setFont(java.awt.Font), setTransform(java.awt.geom.AffineTransform), setComposite(java.awt.Composite), Graphics.setClip(int, int, int, int)
 
 
 
 
drawString
 
public abstract void drawString(AttributedCharacterIterator iterator,
                                int x,
                                int y)
 
    Renders the text of the specified iterator, using the Graphics2D context's current Paint. The iterator has to specify a font for each character. The baseline of the first character is at position (x, y) in the User Space. The rendering attributes applied include the Clip, Transform, Paint, and Composite attributes. For characters in script systems such as Hebrew and Arabic, the glyphs can be rendered from right to left, in which case the coordinate supplied is the location of the leftmost character on the baseline.
 
    Specified by:
        drawString in class Graphics
 
    Parameters:
        iterator - the iterator whose text is to be rendered
        x - the x coordinate where the iterator's text is to be rendered
        y - the y coordinate where the iterator's text is to be rendered
    See Also:
        setPaint(java.awt.Paint), Graphics.setColor(java.awt.Color), setTransform(java.awt.geom.AffineTransform), setComposite(java.awt.Composite), Graphics.setClip(int, int, int, int)
 
 
 
 
drawString
 
public abstract void drawString(AttributedCharacterIterator iterator,
                                float x,
                                float y)
 
    Renders the text of the specified iterator, using the Graphics2D context's current Paint. The iterator must specify a font for each character. The baseline of the first character is at position (x, y) in the User Space. The rendering attributes applied include the Clip, Transform, Paint, and Composite attributes. For characters in script systems such as Hebrew and Arabic, the glyphs can be rendered from right to left, in which case the coordinate supplied is the location of the leftmost character on the baseline.
 
    Parameters:
        iterator - the iterator whose text is to be rendered
        x - the x coordinate where the iterator's text is to be rendered
        y - the y coordinate where the iterator's text is to be rendered
    See Also:
        setPaint(java.awt.Paint), Graphics.setColor(java.awt.Color), setTransform(java.awt.geom.AffineTransform), setComposite(java.awt.Composite), Graphics.setClip(int, int, int, int)


 
Tu pensais à laquelle ?
Je vois pas de méthode qui faire entrer une chaine dans un rectagle donné... DrawString(String,float,float) pour X et Y certes, mais width et height ?
Comment tu fais un "fit" à une chaîne de caractères ?
Si y'a déjà un truc qui le fait, je prends.
 
 
 
 
edit : mal quoté la javadoc


Message édité par raytaller le 01-03-2005 à 19:53:47
Reply

Marsh Posté le 01-03-2005 à 20:09:21    

raytaller a écrit :

c'est dans une class Utils, c'est des fonctions génériques qui servent à tout le monde, ça nécessite pas de sous-classer Graphics2D à mon goût...
 
 
[...]
 
Tu pensais à laquelle ?
Je vois pas de méthode qui faire entrer une chaine dans un rectagle donné... DrawString(String,float,float) pour X et Y certes, mais width et height ?
Comment tu fais un "fit" à une chaîne de caractères ?
Si y'a déjà un truc qui le fait, je prends.
 


Bah drawString ne nécessite pas de sous-classer Graphics2D non plus ;)
 
Sinon j'avais pas vu que ça faisait un fit :jap:

Reply

Marsh Posté le 02-03-2005 à 09:51:09    

rital_5_4 a écrit :

Bonjour à tous.  
Je voudrais faire une petite appli en java dont le but est de dessiner des diagrammes de classes uml dans le genre de argouml http://www-igm.univ-mlv.fr/~dr/XPO [...] rgoUML.htm mais en plus simplifié ...
Et j'aurai aimez savoir si il n'y aurai pas des composants java qui pourrai m'aider a le faire parce que avec des drawrect et des drawstring ca me parrait mal engagé  :pt1cable:  
Je sais pas si j'ai été clair mais si vous pouviez m'aider ca serai sympa :) help me ...  :)


 
Salut,
il existe un truc pas mal pour faire des graphiques de type graphcet, shéma uml, merise et Cie.
Il te fait le calcul automatique de la position des composants graphiques, ce qui entre nous est surement le plus compliqué à réaliser soit même.
 
Pour te mettre sur la piste, voici quelques liens :  
 
graphviz et dot
la page officielle d'AT&T : http://www.research.att.com/sw/tools/graphviz/
la page "opensource" : http://www.graphviz.org
la documentation de dotty http://www.research.att.com/sw/too [...] tguide.pdf
 
grappa
http://www.research.att.com/sw/too [...] rappa.html
la documentation des APIs de grappa http://www.research.att.com/~john/ [...] mmary.html
 
 
 
 
J'espère que l'anglais ne te fait pas peur ;-)

Reply

Marsh Posté le 02-03-2005 à 09:53:15    

C'est quoi ce pseudo ?


---------------
Moi, j'aime pas les signatures - J'écoute actuellement :
Reply

Marsh Posté le 02-03-2005 à 10:01:00    

coffeeman a écrit :

C'est quoi ce pseudo ?


Hihi, j'me suis aussi dit. Ca doit être parce que "Benou" est déjà pris [:benou]

Reply

Marsh Posté le 02-03-2005 à 10:20:34    

lorill a écrit :

l'edition du nom des attributs directement sur le graphique c'est pas si simple non plus, de même pour la sélection, glisser/deposer et cie.


héhéhé ... il faut utiliser le même système que dans les JTable ...


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 03-03-2005 à 22:51:09    

"il faut utiliser le même système que dans les JTable "... en étant plsu precis :) stp

Reply

Marsh Posté le 03-03-2005 à 23:05:28    

c'est assez complexe pour un débutant.
 
Y'a un système de renderer et d'editor, un panel "castreur de composants" etc. bref, il faut aller voir.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed