IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

[Debutant] Graphics : redefinir toute les methodes ?


Sujet :

AWT/Swing Java

  1. #1
    Membre actif
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Points : 247
    Points
    247
    Par défaut [Debutant] Graphics : redefinir toute les methodes ?
    Bonjour,

    J'ai l'erreur suivante au lancement de mon code


    Exception in thread "main" java.lang.NullPointerException
    at TestGraphic.<init>(TestGraphic.java:33)
    at TestGraphic.main(TestGraphic.java:9)

    Je suppose que cela vient du fait que j'utilise la classe Graphics
    qui est abstraite, je serais donc sensé en hériter (et redefinir les methodes abstraites ...) pour pouvoir
    utiliser ces fonctionnalités, mais cela me parrait un peu lourd.

    Y a t'il un moyen plus simple pour dessiner dans mon contexte
    graphique, vu mon code?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
     
    import java.awt.event.*;
    import java.awt.*;
    import javax.swing.*;
     
    public class TestGraphic extends JFrame
    {
    	public static void main (String[] args)
    	{
    	new TestGraphic().show();
    	}
     
     
    public TestGraphic ()
    	{
    	setSize (300,200);
    	addWindowListener (new WindowAdapter() {
    	public void windowClosing (WindowEvent événement)
    		{ 
    		System.exit(0);
    		}
    	});
     
     
    	JPanel test2; 
    	Graphics lecontexteGr;
    	test2 = new lePanneau();
    	getContentPane().add(test2);
    	lecontexteGr = test2.getGraphics();
     
    	lecontexteGr.drawRect(5, 5, 10, 10);
     
    	}
     
    }
     
    class lePanneau extends JPanel {
    public void paintComponent (Graphics surface)
    {
     
    super.paintComponent(surface);
     
    }
     
    }
    D'avance merci de vos réponses

  2. #2
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Oula. Tu appelles getGraphics() (ce qui est *mal* dans ton constructeur. Or a ce moment la ton composant n'est pas "realise" donc sa surface de dessin n'existe pas. Elle n'existe que quand le composant est grosso-modo visible. La solution est donc toute bete :

    1. Vire ca :
    getContentPane().add(test2);
    lecontexteGr = test2.getGraphics();
    lecontexteGr.drawRect(5, 5, 10, 10);

    2. Dans paintComponent() remplace ta ligne super.paintComponent(surface) par lecontexteGr.drawRect(5, 5, 10, 10) ou alors mets les deux, au choix.
    Romain Guy
    Android - Mon livre - Mon blog

  3. #3
    Membre actif
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Points : 247
    Points
    247
    Par défaut
    Merci de la réponse,

    mais de maniére générale, la classe Graphics contient des méthodes
    abstraites, cela veut dire il me semble qu'elles n'ont pas été implementées, mais j'arrive à m'en servir (drawArc par exemple), du coup je comprends pas bien la nuance...

  4. #4
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Ca veut dire que tu recois une implementation de la classe Graphics mais dont tu ne connais pas le nom exact. Seulement, cette implementation herite de Graphics, c'est donc un Graphics. Tu peux meme faire :

    Graphics2D g2 = (Graphics2D) surface;
    Car l'implementation en question est une implementation de Graphics2D qui herite de Graphics.

    Bref, c'est comme quand tu ecris List l = new ArrayList(), alors que List est une interface.
    Romain Guy
    Android - Mon livre - Mon blog

Discussions similaires

  1. Executer toutes les methode d'une classe
    Par thebarbarius dans le forum Langage
    Réponses: 2
    Dernier message: 01/09/2011, 21h22
  2. Stopper toutes les methodes en cours
    Par ald2ff64 dans le forum C#
    Réponses: 1
    Dernier message: 26/11/2010, 21h20
  3. Réponses: 3
    Dernier message: 23/07/2007, 16h13
  4. Réponses: 12
    Dernier message: 23/05/2006, 09h58
  5. [C#] Variables accessibles à toutes les méthodes
    Par defacta dans le forum ASP.NET
    Réponses: 2
    Dernier message: 06/05/2004, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo