Problème Swing avec la méthode getGraphics()

momoSahli Messages postés 13 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 23 décembre 2008 - 19 mars 2008 à 16:46
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 - 20 mars 2008 à 11:27
Salut à tous,

je suis débutant en programmation java Swing, et je fais face à un problème que je ne réussis pas à identifier.

Voilà mon code :

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class Dessiner extends JPanel {
    private Graphics g;
   
    public Dessiner(){
        g = getGraphics();    // la ligne qui retourne l'exception
        g.drawLine(10, 20, 30, 40);
    }
   
    public static void main(String[] argv) {
      JFrame fenetre = new JFrame();
      fenetre.setContentPane(new Dessiner());
      fenetre.show();
  }
}

Voici l'exception levée :

Exception in thread "main" java.lang.NullPointerException
    at Dessiner.(Tester.java:10)
    at Dessiner.main(Tester.java:15)

Merci d'avance

4 réponses

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
19 mars 2008 à 17:41
dans ta classer Dessiner tu doit redefinir la methode paintComponent pour dessiner, il ne faut pas dessiner directement dans le constructeur.
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawLine(10, 20, 30, 40);

Cdt

   
0
cs_Chatbour Messages postés 764 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 6 septembre 2010 19
20 mars 2008 à 10:50
merci pour la réponse.

mais le problème n'est pas là.

import javax.swing.*;
import java.awt.*;

class Dessin extends JPanel{
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawLine(10, 20, 30, 40);
    }
   
    public void dessiner(){
        this.getGraphics().drawOval(10, 30, 20, 20);
    }
}

class Fenetre extends JFrame{
    private Dessin dessin = new Dessin();
   
    public Fenetre(){
        Container conteneur = this.getContentPane();
        conteneur.add(dessin,BorderLayout.CENTER);
        dessin.dessiner();
       
        this.setSize(300, 200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.show();
    }
   
   
}

public class Tester{
    public static void main(String[] args){
        Fenetre f = new Fenetre();
       
    }
}

Pourquoi l'appel à getGraphics() dans la méthode dessiner provoque la même exception ?
0
cs_Chatbour Messages postés 764 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 6 septembre 2010 19
20 mars 2008 à 11:04
Salut,

Mon ami momoSahli s'est trompé et il a répondu en utilisant mon compte qui était connécté par hasard.

C'est tout.
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
20 mars 2008 à 11:27
Bonjour.
Le méchanisme de dessin a des régles précise : le dessin doit persister lors du redimensionnement de la fenêtre par exemple. Je te conseille les liens suivants :
http://java.sun.com/products/jfc/tsc/articles/painting/index.html (anglais)
http://java.developpez.com/faq/gui/?page=graphique_general_dessin#GRAPHIQUE_DESSIN_g2d
http://java.developpez.com/faq/gui/?page=graphique_general_dessin#GRAPHIQUE_DESSIN_fonctionnement

Cdt
0
Rejoignez-nous