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 -
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:
Ma class Fenetre:
Ma class main:
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:
- Probleme d'affichage Graphics JAVA
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
3 réponses
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.
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) {
Je ne suis pas un as en Java, mais il me semble qu'il manque un "repaint" pour update l'affichage :
Normalement ça devrait fonctionner comme ça ;)
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 ;)
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 ?
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 :


Quelqu'un peut m'aidez svp ?
Mais est ce que le @Override est important ?
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.