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
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
A voir également:
- Probleme d'affichage Graphics JAVA
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Intel hd graphics 4600 - Forum Carte graphique
- Java décompiler - Télécharger - Langages
3 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
1 déc. 2015 à 20:19
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.
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) {
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
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 :
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 ;)
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
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 !
Merci beaucoup à toi également !
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
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 ?
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 ?
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
15 févr. 2017 à 18:51
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...
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...
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
16 févr. 2017 à 09:43
ah oui merci beaucoup
2 déc. 2015 à 08:54
Mais est ce que le @Override est important ?
2 déc. 2015 à 09:19
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.