Probleme d'affichage Graphics JAVA

Résolu/Fermé
Evan59245 Messages postés 60 Date d'inscription vendredi 26 avril 2013 Statut Membre Dernière intervention 18 février 2019 - Modifié par Evan59245 le 1/12/2015 à 14:44
neess Messages postés 2 Date d'inscription mercredi 15 février 2017 Statut Membre Dernière intervention 16 février 2017 - 16 févr. 2017 à 09:43
Bonjour,

Je suis actuellement la formation JAVA d'OpenClassroom et je suis arrivé a la partie JFrame.

Le problème est quand j'utilise le Graphics le rond ne s'affiche pas ...
J'utilise un mac est ce que c'est du a sa ?

Mon code:

La class Panneau:

package JFrame;

import java.awt.Graphics;

import javax.swing.JPanel;

public class Panneau extends JPanel {

public void PaintComponent (Graphics g)
{
int x1 = this.getWidth()/4;
int y1 = this.getHeight()/4;
g.fillOval(x1, y1, this.getWidth()/2, this.getHeight()/2);
}

}


Ma class Fenetre:

package JFrame;

import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Fenetre extends JFrame
{

public Fenetre()
{
this.setTitle("Ma première fenêtre Java");
this.setSize(400, 250);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(new Panneau());
this.setVisible(true);
}
}


Ma class main:

package JFrame;

import javax.swing.JFrame;

public class Test {

public static void main (String[] args){

Fenetre fenetre = new Fenetre();
}

}


A voir également:

3 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
1 déc. 2015 à 20:19
Bonjour,

Je réponds de tête, il y a peut être d'autres erreurs que seul un compilateur pourrait deviner mais il y a au moins un problème bloquant :

La méthode d'affichage d'un Component c'est paintComponent(Graphics) avec un p minuscule à paint (car tout les noms de méthode doivent commencer par une minuscule).
Tu peux définir une méthode PaintComponent(Graphics) avec un P majuscule (personne peut t'en empêcher) mais ce n'est pas celle ci qui sera appelée pour dessiner le Component donc c'est normal que ton cercle ne s'affiche pas.

Une bonne pratique quand tu veux redéfinir une méthode héritée d'une classe parente c'est de lui ajouter l'annotation @Override
D'une part c'est plus clair dans le code, d'autre part si tu te trompe dans la signature de la méthode à surcharger tu auras une erreur explicite à la compilation.

public class Panneau extends JPanel {

    @Override
    public void paintComponent(Graphics g) {
4
Evan59245 Messages postés 60 Date d'inscription vendredi 26 avril 2013 Statut Membre Dernière intervention 18 février 2019
2 déc. 2015 à 08:54
Merci beaucoup c'était justement ce p qui était en majuscule...
Mais est ce que le @Override est important ?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
2 déc. 2015 à 09:19
Le @Override est une sécurité, essaye de la mettre avec le P majuscule, Java te dira tout de suite qu'il y a un problème.
Et comme je l'ai dit c'est plus clair dans le code, avec @Override on voit tout de suite que la méthode est une surcharge de la classe parente.
Mais fondamentalement ça ne change rien au code, cette annotation ne sert que pour la compilation.
0
ElexXVII Messages postés 45 Date d'inscription dimanche 10 août 2014 Statut Membre Dernière intervention 1 juillet 2017 1
Modifié par ElexXVII le 1/12/2015 à 20:47
Je ne suis pas un as en Java, mais il me semble qu'il manque un "repaint" pour update l'affichage :
public void paintComponent (Graphics g)
 {
     int x1 = this.getWidth()/4;
     int y1 = this.getHeight()/4;                      
     g.fillOval(x1, y1, this.getWidth()/2, this.getHeight()/2);

     // A ne pas oublier, Pour afficher les changement :
     this.repaint();
 }

Normalement ça devrait fonctionner comme ça ;)
0
Evan59245 Messages postés 60 Date d'inscription vendredi 26 avril 2013 Statut Membre Dernière intervention 18 février 2019
2 déc. 2015 à 08:55
C'était le p de paintComponent qui était en majuscule qui n'était pas bon!
Merci beaucoup à toi également !
0
neess Messages postés 2 Date d'inscription mercredi 15 février 2017 Statut Membre Dernière intervention 16 février 2017
15 févr. 2017 à 12:47
j'ai presque même problème que toi , Panneau :

import java.awt.Graphics;

import javax.swing.JPanel;

public class Panneau extends JPanel {

public void paintComportement(Graphics g){

System.out.println("Je suis exécutée ! ");

g.fillOval(20, 20 , 75, 75);

}

}

Fenetre :

iimport javax.swing.JFrame;

public class Fenetre extends JFrame {

public Fenetre(){

this.setTitle("Ma première fenetre JAVA");

this.setSize(100,150);

this.setLocationRelativeTo(null);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setContentPane(new Panneau());

this.setVisible(true);

}

}

Test:

import javax.swing.JFrame ;

public class Test {

public static void main(String[] args){

JFrame fen = new Fenetre();

}

}

Normalement il va m'afficher :
mais elle ne s'affiche pas :
,
Quelqu'un peut m'aidez svp ?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
15 févr. 2017 à 18:51
Bonjour,

Même chose que précédemment, si tu mettais des @Override sur les méthodes que tu veux surcharger tu verrais qu'il y a un problème dans Panneau car paintComportement ça n'existe pas, c'est paintComponent qui existe et qui gère l'affichage...
0
neess Messages postés 2 Date d'inscription mercredi 15 février 2017 Statut Membre Dernière intervention 16 février 2017
16 févr. 2017 à 09:43
ah oui merci beaucoup
0