[Java] Problème de dessin dans jPanel

Problème de dessin dans jPanel [Java] - Java - Programmation

Marsh Posté le 18-05-2010 à 11:21:05    

Bonjour à tous,
 
voilà je voudrais tracer dans un jPanel un rectangle suivant les dimensions préalablement indiquées dans une boite de dialogue.
 
Voici le code du JFrame:
 
 
public class EDT extends javax.swing.JFrame {
 
    private LesActivités edt;
    private Activité ici;
 
    /** Creates new form EDT */
    public EDT() {
        initComponents();
        edt=new LesActivités();
        ici=new Activité();
    }
 
    public void paint(Graphics g){
        super.paint(g);
        if(edt.getNb()!=0){
            ici=edt.rechActivité();
            afficheRect(ici.getCoul(), ici.getNom(), ici.getDurée(), ici.getHdeb(), Frise);
 
        }
    }
 
    public void afficheRect(Color co, String k, int h, int y, JPanel pan){
        Graphics g=pan.getGraphics();
        int DepartY=(Frise.getHeight()/13)*(y-8);
        int Hauteur=(Frise.getHeight()/13)*h;
        int Largeur=Frise.getWidth();
        g.setColor(co);
        g.drawRect(0, DepartY, Largeur, Hauteur);
        g.setFont(new Font("Helvetica",Font.PLAIN,12));
        g.drawString(k, 15, DepartY+15);
    }
 
                       
    private void MonumentActionPerformed(java.awt.event.ActionEvent evt) {                                          
        ChoisirMonument diag;
        diag=new ChoisirMonument(this, true);
        diag.setVisible(true);
        if(diag.ok==true){
            edt.ajoutActivité(diag.acti);
        }
}                      
 

 
Ma classe Activités sert à créer une activité selon des paramètres choisis. Ces paramètres sont rentrés dans ma boite de dialogue ChoisirMonument et sont récupérées pour tracer mon rectangle.
Ma classe LesActivités gère mes activités dans un tableau.
 
Je veux donc récupérer la dernière activité créée et dessiner son "rectangle" dans mon jPanel
Probleme rien ne se passe !
Ma fonction afficheRect marche je l'ai testée, mais rien ne s'affiche.
Juste quand je réduis ma fenetre et que je la ragrandit que le programme me sort une erreur "Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
"
 
Je tiens aussi à préciser que j'ai voulu tout faire en SWING mais comme un c** j'ai pris mes boites de dialogue en Dialog et non JDialog, est ce que ça pose probleme ?
 
Merci d'avance !
 
 
 
EDIT :
Je pensais que ça venait forcément de mon paint() mais j'ai aussi des doutes sur ma classe LesActivités donc je poste son code :
 
public class LesActivités {
 
    private Activité tab[];
    private int nb;
 
    public LesActivités(){
        nb=0;
        tab=new Activité[14];
    }
 
    public void ajoutActivité(Activité a){
        tab[nb++]=a;
    }
 
    public Activité rechActivité(){
        return tab[nb];
    }
 
    public int getNb(){
        return nb;
    }
 
    public void resetTab(int n){
        tab[n]=null;
    }
}


Message édité par VinceSSJ le 18-05-2010 à 11:29:07
Reply

Marsh Posté le 18-05-2010 à 11:21:05   

Reply

Marsh Posté le 18-05-2010 à 21:09:24    

Bon j'ai réussi à corriger le problème tout seul ^^
 
L'erreur venait bien du paint()
 
J'ai donc procédé avec une boucle et ça marche !

    public void paint(Graphics g){
        super.paint(g);
        if(edt.getNb()!=0){
            for(int i=0;i<edt.getNb();i++){
                ici=edt.retActivité(i);
                afficheRect(ici.getCoul(), ici.getType(), ici.getNom(), ici.getDurée(), ici.getHdeb(), Frise);
            }
        }
    }

 
Enfin en partie, puisque pour que les dessins se voient dans mon JPanel il faut avant tout que je réduise/agrandisse ma Frame au moins une fois, comme si ça "amorçait" mon paint()... bizarre ??

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed