bonjour
je voudrais representer quelques points sur un repere (x, y), mais je ne sais pas comment m'y prendre, pouvez vous m'aider ou m'indiquer un tutorial.
Merci
Version imprimable
bonjour
je voudrais representer quelques points sur un repere (x, y), mais je ne sais pas comment m'y prendre, pouvez vous m'aider ou m'indiquer un tutorial.
Merci
Il te faut lire un didacticiel et faire quelques excercices sur Java 2D. Un livre interressant (quoiqu'ancien mais toujours d'actu a 90%) pour commencer est Java 2D Graphics chez O'Reilly dont les exemples devraient etre sur leur site FTP et d'exemples y compris celui qui dessine un simple repere a l'ecran (mais je n'arrive pas a joindre ces deux sites actuellement)...
merci pour ta reponse, mais est ce que quelqu'un peut m'aider ^^pour representer un repere, je n'arrive pas a demarrer.
Merci
C'est a dire ? Tu ne sais pas comment afficher une fenetre a l'ecran ? Comment dessiner dans un panel ? Ou comment tracer des traits ?
Ta question est trop vague.
Dans tous les cas cherche des didacticiels sur Java2D sur ce site ou sur Google.
Justement j'ai effectué des recherches avec Google mais sans espoire, le truc c'est que je n'arrive pas a tracer mettre des pointou des traits, j'ai creer un JPanel mais ensuite je ne sais pas ce que je dois mettre dedans.
Bienvenue dans le monde de la 2D.
Il te faut surcharger la methode paintComponent(Graphics g) pour peindre dans ton panel.
L'appel a super.paintComponent(g) permet de faire que le fond du panel sera dessiner. Ce n'est pas obligatoire si comme dans l'exemple tu vas recouvrir toute la surface du panel d'une couche de blanc.Code:
1
2
3
4 /** {@inheritDoc} */ @Override protected void paintComponent(Graphics g) { super.paintComponent(g);
Note qu'ici nous faisons une surcharge simple, sans tenir compte de la bordure optionnelle que peut avoir tout composant Swing.Code:
1
2
3 Dimension size = getSize(); g.setColor(Color.WHITE); g.fillRect(0, 0, size.width, size.height);
Ensuite nous allons changer le repere pour le mettre au milieu du panel.
A partir de cet appel le point (0, 0) est en fait le point situe au beau milieu du panel.Code:g.translate(size.width/2, size.height/2);
Nous venons de dessiner les deux axes du repere. Comme tu peux le voir l'axe des Y va VERS LE BAS. C'est normal car sur un ecran d'ordi le point (0, 0) est le coin superieur gauche et l'axe des Y est dirige vers le bas de l'ecran. Donc si tu veux dessiner des courbes mathematiques ou des figures "comme sur papier" il faut toujours songer a utiliser les opposees des valeurs sur les ordonnees (en mettant un - devant la seconde coordonnee). Par exemple utiliser g.drawLine(0, 0, 0, -10) dessinera la ligne "dans le sens normal". Il faut s'en souvenir car ca influe entre autre sur le sens du cercles trigonometrique (et donc l'orientation des angles).Code:
1
2
3
4 g.setColor(Color.BLACK); g.drawLine(0, 0, 10, 0); g.setColor(Color.GRAY); g.drawLine(0, 0, 0, 10);
Nous venons de peindre un carre autour du point (0, 0) (qui est il faut le rappeler le centre du panel). Tu as plusieurs methodes pour dessiner des points : afficher un petit carre, afficher un petit cercle, dessiner une croix, .... a toi de voir.Code:
1
2 g.setColor(Color.RED); g.fillRect(-1, -1, 2, 2);
Pourquoi cet appel ? Simplement pour restaurer l'origine du repere a sa position initiale. C'est TRES IMPORTANT surtout si Swing fait d'autre operations de dessin par la suite. En restaurant TOUTES tes transformations tu seras sur que ton dessin s'affichera correctement a l'ecran.Code:
1
2 g.translate(-size.width/2, -size.height/2); }
Voila c'est un moyen simple de dessiner sur l'ecran. Par la suite il te faut voir les didacticiels, les livres et faire des exemples ou encore lire les doc de java.awt.Graphics, java.awt.Graphics2D et de plusieurs objets (mais pas tous) des packages java.awt.image et java.awt.geom.
Les autres trucs a savoir :
- drawXXX signifier dessiner : on trace des traits du contour d'une figure avec une peinture/couleur.
- fillXXX signifie remplir : on remplir l'interieur d'une figure avec une peinture/couleur.
- la classe Graphics2D offre bien plus de methodes et de facilites que la classe Graphics. En AWT/Swing il est toujours possible de faire si g est un Graphics :
- les composants Swing peuvent avoir une bordure optionnel dont il faut tenir compte si on veut un dessin correct quand cette bordure est mise en place.Code:Graphics2D g2d = (Graphics2D)g
Note : l'appel a g2d.dispose() annule toutes les transformations affines en cours. Il ne faut SURTOUT pas appeler dispose() sur le Graphics passe en parametre de paintComponent(). Mais tu peux tres bien te proteger en creant une "vue" sur ce Graphics en appelant tout simplement g.create() (sans parametre ce qui cree une vue a l'identique). Tu peux disposer de cette vue sans probleme.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 /** {@inheritDoc} */ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Dimension size = getSize(); Insets insets = getInsets(); int width = size.width - (insets.left + insets.right); int height = size.height - (insets.top + insets.bottom); try { Graphics2D g2d = g.create(insets.left, insets.top, width, height); .......... } finally { g2d.dispose(); } }
- il est possible de definir une zone d'affichage (pas forcement rectangulaire) avec g.setClip(). Rien de ce qui sera dessine en dehors de la zone n'apparaitra. Il faut penser a sauvegarder (et restorer a la fin) la zone de clip d'origine cependant.
- on peut controler la forme ET l'epaisseur d'un trait avec des objets de type Stroke et BasicStroke et en faisant g.setStroke() avant de peindre un trait ou une figure.
- outre les couleurs unies (qui peuvent etre transparentes), on peut utiliser des gradients et des textures avec les objets GradientPaint (et egalement LinearGradientPaint, MultipleGradientPaint, RadialGradientPaint dans Java 6), TexturePaint en faisant g.setPaint() avant de remplir une figure. Ca marche aussi pour les traits.
- les objets de types Font controlent bien sur la forme des caracteres d'une ligne de texte ecrite avec g.drawString() en faisant... g.setFont().
- il est possible de specifier des indices de rendu qui permettent d'activer ou pas des fonctionalites et des optimisation du rendu, par exemple l'antialiasing sur les textes ou sur les formes.
Il existe d'autre indices nottament RenderingHints.KEY_INTERPOLATION qui controle l'algorithme utilise lors de transformations sur les images (ce qui permet d'avoir un resultat pixelise ou au contraire lisse mais au detriment de plus long temps de calculs).Code:
1
2 g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
...........
merci pour ta réponse, elle m'a été d'une grande utilité.