cs_rotaryb
Messages postés11Date d'inscriptionlundi 9 mai 2005StatutMembreDernière intervention10 juin 2005
-
1 juin 2005 à 21:44
bloofi
Messages postés388Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention 3 mai 2006
-
12 juin 2005 à 20:38
Bonjour,
J'ai pris des trucs à droite à gauche, mais j'arrives pas à dessiner un cercle.
J'aimerai qu'il se dessine en appuyant sur le bouton "cerle", mais avant ca rien que le faire apparaitre serai très bien.
bloofi
Messages postés388Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention 3 mai 20062 1 juin 2005 à 22:00
J'ai pas vu l'endroit ou tu appelais la methode Cercle (Graphics g) ... amois d'avoir mal regardé... essaye en remplant "Cercle" par "paint" (surcharge de methode paint donc...)
et pour ton canvas, j'ai juste vu une déclaration et tu l'ajoute dans son conteneur, mais tu ne l'utilise pas par la suite...
cs_rotaryb
Messages postés11Date d'inscriptionlundi 9 mai 2005StatutMembreDernière intervention10 juin 2005 2 juin 2005 à 19:32
En fait, je n'apelle pas Cercle (Graphics g) car je ne sais pas comment le faire, ni ou le mettre (enfin si dès l'appuis sur le bouton cercle, mais comment ?).
Pour mon canvas, je ne l'utilise pas ? Je crois que j'ai rien compris au java... Pourtant, il est bien là, enfin je crois, on l'utilise comment alors.
Mes questions peuvent parraitre bête, mais il me faut un projet pour le mois prochain, et la programation, c'est pas mon truc.
bloofi
Messages postés388Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention 3 mai 20062 2 juin 2005 à 19:55
Dans un premier temps, essaye le bout de code que j'ai posté, fait des sorties consoles
System.out.println("pouet");
un peu partout pour comprendre comment ca tourne et ensuite tu pourras
modifier ce dont tu as besoin, rajouter des fonctionnalites, des
formes, etc...
Pour le canvas, tu peux l'utiliser mais aussi utiliser un autre
composant (comme un JPanel par exemple), il faut simplement que tu
redéfinisse la methode "paint(Graphics g)".
cs_rotaryb
Messages postés11Date d'inscriptionlundi 9 mai 2005StatutMembreDernière intervention10 juin 2005 2 juin 2005 à 22:29
J'ai essayé la ligne : System.out.println("pouet"); ca me donne une petite idée du style action/réaction. je vais approfondir avec ca.
Par contre, j'ai pas compris la fonction repaint(), il me semblai que ca coloriait l'intérieur d'une forme. or dans ton programme, les cercles ne sont pas coloriés, pourquoi ?
De plus, est ce bien la ligne : public void mouseExited(MouseEvent e) {} qui permet de fermer le programme à l'aide de la croix windows ? je l'ai incorporé dans mon programme, et rien. Par contre si je l'enlève du tiens, ca compile plus. elle est dépendante des lignes ecrite un peu plus haut ?
bloofi
Messages postés388Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention 3 mai 20062 2 juin 2005 à 22:39
Alors,
- repaint() sert a rappeler automatiquement la methode paint(Graphics g)
- si tu veux un cercle plein, utilise fillOval() plutot que drawOval() (remplir / dessiner)
- pour mouseExited, c'est une methode qui fait partie de
l'interface MouseListener... Si une classe implemente une interface,
elle est obligée de redefinir toutes ses methodes. En gros, un
evenement mouseExited sera lancé a chaque fois que ton curseur sortira
de ton canvas (le composant qu iimplemente MouseListener)
- Pour quitter le programme avec la croix, tu peux soit
- ajouter la ligne this.setDefaultCloseOperation(EXIT_ON_CLOSE) dans le constructeur de ta JFrame (APIGraphe)
- ou alors ajouter un WindowListener a ta JFrame,
implementer ses methodes et faire le necessaire dans les methodes
windowClosing() et windowClosed()
cs_rotaryb
Messages postés11Date d'inscriptionlundi 9 mai 2005StatutMembreDernière intervention10 juin 2005 6 juin 2005 à 23:02
Voilà, j'ai fais quelques modifs, mais 3 trucs me chiffonnent :
- Je n'arrive pas à changer la taille de la fenetre, c'est bien cette ligne - this.setSize(400 , 300); ?
- Je n'arrive pas à changer la taille des cercles et carrés c'est bien cette ligne - cercles.add(new Cercle(x-10,y-10,20,20));
- Pourquoi mes dessins sont toujours noir et ne change pas de couleur à chaque nouvelle figure ?
public void mouseClicked(MouseEvent e) {
Random r=new Random();
int fig = r.nextInt(2)+1;
if (fig == 1) graf.ajouterCercle(e.getX() , e.getY());
else graf.ajouterCarre(e.getX() , e.getY());
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
//la on etend un canvas dans lequel on va dessiner les formes
//mais ca peut etre un panel ou n'importe quel composant graphique.
class Graphe extends Canvas{
ArrayList cercles = new ArrayList() ;
ArrayList carres = new ArrayList() ;
public Graphe(){}
public void ajouterCercle(int x , int y){
cercles.add(new Cercle(x-10,y-10,20,20));
repaint();
}
public void ajouterCarre(int x , int y){
carres.add(new Carre(x-10,y-10,20,20));
repaint();
}
public void paint(Graphics g){
setBackground(Color.blue);
for (int v = 0; v <= 9; v++)
{
g.setColor(colors[v % colors.length]);
}
for(int i = 0 ; i < cercles.size() ; i++)
{//on peint tous les cercles
Cercle c = (Cercle) cercles.get(i) ;
g.fillOval(c.getX(),c.getY(),c.getWidth(),c.getHeight());
}
for(int i = 0 ; i < carres.size() ; i++)
{//on peint tous les carres
Carre c = (Carre) carres.get(i) ;
g.fillRect(c.getX(),c.getY(),c.getWidth(),c.getHeight());
}
}
}//fin de class Graphe
//petite class vite fait pour un cercle
class Cercle{
int x , y , w , h ;
public Cercle(int x , int y , int width , int height){
this.x = x ;
this.y = y ;
this.w = width ;
this.h = height ;
}
public int getX(){return x;}
public int getY(){return y;}
public int getWidth(){return w;}
public int getHeight(){return h;}
}//fin de classe Cercle
//petite class vite fait pour un carre
class Carre{
int x , y , w , h ;
public Carre(int x , int y , int width , int height){
this.x = x ;
this.y = y ;
this.w = width ;
this.h = height ;
}
public int getX(){return x;}
public int getY(){return y;}
public int getWidth(){return w;}
public int getHeight(){return h;}
}//fin de classe Carre
cs_rotaryb
Messages postés11Date d'inscriptionlundi 9 mai 2005StatutMembreDernière intervention10 juin 2005 7 juin 2005 à 22:10
Comprends pas ce qui m'est arrivé avec les problèmes de taille de fenetre et de figures, maintenant ca marche.
J'ai essayé ce que tu viens de m'écrire, mais ca créé une erreur ligne 42 :
cercles.add(new Cercle(x-25,y-25,50,50));
Il doit manquer une variable (la couleur surrement), j'ai donc essayer de mettre ca :
cercles.add(new Cercle(x-25,y-25,50,50,col));
ca ne marche pas non plus.
cs_rotaryb
Messages postés11Date d'inscriptionlundi 9 mai 2005StatutMembreDernière intervention10 juin 2005 9 juin 2005 à 18:52
En fait, quand j'ai tenté les lignes :
-private static Color[] colors = {Color.red,Color.green,Color.gray,Color.orange,
Color.yellow,Color.magenta,Color.pink,Color.white,Color.cyan,Color.black};
-for (int v = 0; v <= 9; v++)
{
g.setColor(colors[v % colors.length]);
}
(J'ai trouvé ca sur un autre prog, mais j'ai du oublier un truc...)
J'esperai comme ca faire changer les cercles de couleur de facon cyclique ou aleatoire sans passer par un truc lourd du style random i - if i==1 color=bleu; if i==2 color=...