Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

graphic 2D

2 réponses
Avatar
Sylviane Molinet
Bonjour,

Débutante en java, je souhaiterais vous poser 3 questions :

Voici le cadre de mon programme :
j'ai créé un panneau dans une JInternalFrame qui contient un champ de
saisie x_coordonnee, un bouton OK et un graphique 2D :

JInternalFrame f2;
f2 = new JInternalFrame("test",true,true,true,true);
f2.setResizable(true);
Container c=f2.getContentPane();
c.setLayout(new FlowLayout());
JLabel x_coordonnee = new JLabel("x coordonnee :");
c.add(x_coordonnee);
saisie = new JTextField ();
c.add(saisie);
ok=new JButton("OK");
c.add(ok);
ok.addActionListener(this);
pG=new Panneau();
c.add(pG);

Dans mon panneau pG je crée un dessin 2D quelconque.

class Panneau extends JPanel
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawLine(40,200,40,70);
}

La classe de mon écouteur d'évenement est la suivante :

public void actionPerformed(ActionEvent e)
{
JButton b = (JButton) e.getSource();
if(b==ok)
{
string ch = saisie.getText();
// je souhaiterais rajouter une nouvelle ligne à mon graphique
avec comme coordonnée pour x celle du champ de saisie
}
}

Mes questions :

1. je souhaiterais savoir comment récupérer mon champ de saisie et le
convertir en un type entier ? ou existe-t-il un champ de saisie
JIntField ?

2. Je souhaiterais savoir comment rajouter un nouveau composant
quelconque (ligne, rectangle) à mon graphique lorsque je clique sur mon
bouton OK.
Lorsque je redimensionne ma JInternalFrame ou lorsque j'iconifie cette
fenêtre ce nouveau composant devrait être réaffiché également.

3. Lorsque je transforme (translation et rotation de 90°) l'un des
composants de mon graphique en rajoutant dans ma classe Panneau :

Graphics 2D gd2 = (Graphics2D)g ;
AffineTransform at = new AffinTransform();
at.setToTranslation(10.0,40.0);
g2d.transform(at);
at.setToRotation(Math.PI/2.0);
g2d.transform(at);
g.drawString("axe des abscisses", 0,0);

j'obtiens bien un texte vertical. Ma question est de savoir comment
faire une nouvelle transformation à la suite de celle-ci ? Parce que
lorsque
je recrée une nouvelle transformation affine elle s'applique également à
la transformation précédente mais je voudrais recréer une nouvelle
transformation.

Merci d'avance pour votre aide et votre attention !

2 réponses

Avatar
Isammoc
1. je souhaiterais savoir comment récupérer mon champ de saisie et le
convertir en un type entier ? ou existe-t-il un champ de saisie
JIntField ?


regarde ce lien :
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JTextField.html

et fait la meme chose mais pour des entiers...
et puis, tu peux faire un Integer.parseInt(String)

2. Je souhaiterais savoir comment rajouter un nouveau composant
quelconque (ligne, rectangle) à mon graphique lorsque je clique sur mon
bouton OK.
Lorsque je redimensionne ma JInternalFrame ou lorsque j'iconifie cette
fenêtre ce nouveau composant devrait être réaffiché également.


Tu associe ton bouton OK à une action que tu a redéfini qui prend comme
paramètre ton graphique, et qui dessine dedans..

3. Lorsque je transforme (translation et rotation de 90°) l'un des
composants de mon graphique en rajoutant dans ma classe Panneau :

Graphics 2D gd2 = (Graphics2D)g ;
AffineTransform at = new AffinTransform();
at.setToTranslation(10.0,40.0);
g2d.transform(at);
at.setToRotation(Math.PI/2.0);
g2d.transform(at);
g.drawString("axe des abscisses", 0,0);

j'obtiens bien un texte vertical. Ma question est de savoir comment
faire une nouvelle transformation à la suite de celle-ci ? Parce que
lorsque
je recrée une nouvelle transformation affine elle s'applique également
à

la transformation précédente mais je voudrais recréer une nouvelle
transformation.


Là, je sais pas ;-P

Merci d'avance pour votre aide et votre attention !


de rien ;)

--
Isammoc

Avatar
Zazoun
2. Je souhaiterais savoir comment rajouter un nouveau composant
quelconque (ligne, rectangle) à mon graphique lorsque je clique
sur mon


bouton OK.
Lorsque je redimensionne ma JInternalFrame ou lorsque j'iconifie
cette


fenêtre ce nouveau composant devrait être réaffiché également.


Tu associe ton bouton OK à une action que tu a redéfini qui prend
comme

paramètre ton graphique, et qui dessine dedans..


Le composant dans lequel tu dessines doit avoir une référence vers le
modèle qu'il représente (pour toi, a priori, une liste des objets à
dessiner : points, lignes ...), et "écouter" les modifications de ce
modèle, pour se repeindre quand le modèle a changé. L'action du
bouton OK, quand à elle, doit modifier le modèle. (Vois de la
documentation sur le modèle "Modèle-Vue-Controleur")

3. Lorsque je transforme (translation et rotation de 90°) l'un des
composants de mon graphique en rajoutant dans ma classe Panneau :

Graphics 2D gd2 = (Graphics2D)g ;
AffineTransform at = new AffinTransform();
at.setToTranslation(10.0,40.0);
g2d.transform(at);
at.setToRotation(Math.PI/2.0);
g2d.transform(at);
g.drawString("axe des abscisses", 0,0);

j'obtiens bien un texte vertical. Ma question est de savoir comment
faire une nouvelle transformation à la suite de celle-ci ? Parce
que


lorsque
je recrée une nouvelle transformation affine elle s'applique
également


à
la transformation précédente mais je voudrais recréer une
nouvelle


transformation.



La méthode transform(AffineTransform tx) de Graphics2D ajoute la
transformation affine en paramètre à celle que contient déjà
Graphics2D. Si tu veux redéfinir cette dernière, utilise plutôt la
méthode setTransform( AffineTransform tx).