Probleme d'affichage Graphics JAVA

Résolu
Evan59245 Messages postés 60 Date d'inscription   Statut Membre Dernière intervention   -  
neess Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention  
 
Merci beaucoup c'était justement ce p qui était en majuscule...
Mais est ce que le @Override est important ?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention  
 
ah oui merci beaucoup
0