Que passer comme argument ???
Fermé
site12
Messages postés
288
Date d'inscription
dimanche 13 février 2011
Statut
Membre
Dernière intervention
3 décembre 2017
-
2 sept. 2015 à 18:54
site12 Messages postés 288 Date d'inscription dimanche 13 février 2011 Statut Membre Dernière intervention 3 décembre 2017 - 4 sept. 2015 à 22:04
site12 Messages postés 288 Date d'inscription dimanche 13 février 2011 Statut Membre Dernière intervention 3 décembre 2017 - 4 sept. 2015 à 22:04
A voir également:
- Que passer comme argument ???
- Passer de qwerty a azerty - Guide
- Passer a windows 10 - Accueil - Mise à jour
- Passer de majuscule à minuscule - Guide
- Passer à la ligne excel - Guide
- Passer à windows 11 gratuitement - Guide
2 réponses
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
Modifié par KX le 2/09/2015 à 19:15
Modifié par KX le 2/09/2015 à 19:15
Bonjour,
Normalement tu dois récupérer l'objet Graphics depuis des méthodes de bas niveau comme Component.paint(Graphics g) que tu surcharges comme ça :
Exemple :
Normalement tu dois récupérer l'objet Graphics depuis des méthodes de bas niveau comme Component.paint(Graphics g) que tu surcharges comme ça :
@Override public void paint(Graphics g) { super.paint(g); // ne pas oublier ! dessiner(g); }
Exemple :
import java.awt.Graphics; import javax.swing.JFrame; public class Test { public static void main(String[] args) { JFrame frame = new JFrame() { @Override public void paint(Graphics g) { super.paint(g); g.drawRect(50, 50, 50, 50); } }; frame.setSize(150, 150); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }La confiance n'exclut pas le contrôle
site12
Messages postés
288
Date d'inscription
dimanche 13 février 2011
Statut
Membre
Dernière intervention
3 décembre 2017
23
4 sept. 2015 à 16:40
4 sept. 2015 à 16:40
Je comprends toujours pas, alors je récapitule
Je veux appeller la méthode PaintComponent depuis la classe main, comment je fais ?????
voici mes 2 classes:
Je veux appeller la méthode PaintComponent depuis la classe main, comment je fais ?????
voici mes 2 classes:
public class main {
public static void main(String[] args) {
// TODO Auto-generated method stub
fenetre Display = new fenetre();
Display.afficher();
//C'EST ICI QUE JE VEUX APPELLER LA METHODE PAINTCOMPONENT DE
//LA CLASSE FENETRE, COMMENT JE FAIS ???
}
}
import javax.swing.JFrame;
import java.awt.Graphics;
import java.awt.Color;
public class fenetre {
JFrame fenetre = new JFrame();
public void afficher(){
fenetre.setTitle("Ma fenetre Java");
fenetre.setSize(800,600);
fenetre.getContentPane().setBackground(Color.darkGray);
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenetre.setVisible(true);
}
public void paintComponent(Graphics g){
g.drawRect(10, 10, 15, 50);
}
}
site12
Messages postés
288
Date d'inscription
dimanche 13 février 2011
Statut
Membre
Dernière intervention
3 décembre 2017
23
4 sept. 2015 à 16:41
4 sept. 2015 à 16:41
Je ne peux pas écrire Display.paintComponent(g) car g n'est pas défini dans le main
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
4 sept. 2015 à 17:28
4 sept. 2015 à 17:28
N'utilises pas la méthode paintComponent(Graphics) mais plutôt paint(Graphics)
Si tu appelles la méthode repaint(), elle va appeler la méthode paint en lui passant le paramètre Graphics qui convient.
Remarque : les conventions de nommages, c'est majuscules pour les classes, minuscules pour les méthodes et les variables, pas l'inverse.
Remarque : Mélanger le français et l'anglais "display.afficher()" ça fait bizarre...
Si tu appelles la méthode repaint(), elle va appeler la méthode paint en lui passant le paramètre Graphics qui convient.
Remarque : les conventions de nommages, c'est majuscules pour les classes, minuscules pour les méthodes et les variables, pas l'inverse.
public class Main { public static void main(String[] args) { Fenetre display = new Fenetre(); display.afficher(); display.repaint(); // appelles paint(Graphics) } }
Remarque : Mélanger le français et l'anglais "display.afficher()" ça fait bizarre...
site12
Messages postés
288
Date d'inscription
dimanche 13 février 2011
Statut
Membre
Dernière intervention
3 décembre 2017
23
4 sept. 2015 à 17:34
4 sept. 2015 à 17:34
En fait j'avais oublié le
Mais bizarrement, repaint ne dessine rien du tout
extends JPanel, donc maintenant
repaint(), fonctionne.
Mais bizarrement, repaint ne dessine rien du tout
site12
Messages postés
288
Date d'inscription
dimanche 13 février 2011
Statut
Membre
Dernière intervention
3 décembre 2017
23
4 sept. 2015 à 17:36
4 sept. 2015 à 17:36
Pour info j'ai renommé
public void paintComponent(Graphics g)en
public void paint(Graphics g)mais ça ne déssine rien
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
Modifié par KX le 5/09/2015 à 10:56
Modifié par KX le 5/09/2015 à 10:56
Ça ne dessine rien car il n'y a rien à dessiner.
Ton objet Fenetre display n'est jamais utilisé. Il crée la JFrame fenetre, qui elle est affichée, mais qui ne contient pas le JPanel dont la méthode paint est définie.
Il faudrait au minimum que tu ajoutes le JPanel à la JFrame.
Remarque : il te manque aussi le super.paint(g) dans la méthode paint(Graphics)
Mais ton code est très confus, ce n'est pas au JPanel de créer la JFrame, mais l'inverse, sans parler de l'ambiguïté entre le type fenetre et l'objet fenetre...
Voici une correction de ton code :
Remarque : noir sur gris foncé ça ne se voit pas très bien, mais le rectangle est bien dessiné.
Ton objet Fenetre display n'est jamais utilisé. Il crée la JFrame fenetre, qui elle est affichée, mais qui ne contient pas le JPanel dont la méthode paint est définie.
Il faudrait au minimum que tu ajoutes le JPanel à la JFrame.
Remarque : il te manque aussi le super.paint(g) dans la méthode paint(Graphics)
public class fenetre extends JPanel { // panel de type fenetre JFrame fenetre = new JFrame(); // variable fenetre de type JFrame public void afficher() { fenetre.add(this); // ajout du JPanel de type fenetre dans la JFrame fenetre
Mais ton code est très confus, ce n'est pas au JPanel de créer la JFrame, mais l'inverse, sans parler de l'ambiguïté entre le type fenetre et l'objet fenetre...
Voici une correction de ton code :
import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; public class Fenetre extends JFrame { private static final long serialVersionUID = 1L; public Fenetre() { setTitle("Ma fenetre Java"); setSize(800, 600); getContentPane().setBackground(Color.DARK_GRAY); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } @Override public void paint(Graphics g) { super.paint(g); // ne pas oublier ! g.drawRect(10, 10, 15, 50); } }
public class Main { public static void main(String[] args) { Fenetre fenetre = new Fenetre(); fenetre.setVisible(true); } }
Remarque : noir sur gris foncé ça ne se voit pas très bien, mais le rectangle est bien dessiné.
2 sept. 2015 à 19:28
Ce que tu me dit de mettre, dans MON cas, ça se met dans la classe principale main ou dans la classe fenetre ?
2 sept. 2015 à 19:36
Dans tous les cas, l'objet Graphics qu'il faut passer comme argument doit venir de la méthode paint(Graphics).
Exemple :