[java] identifier expected after this tocken

[Résolu/Fermé]
Signaler
-
 domxaline -
Bonjour,
voilà mon classe DecorNuit donne une erreur suivant
"identifier expected after this tocken"
pourtant,dans la classe DecorJour, j'ai aucun pb
veullez m'aider svp

voilà mon code:

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

import com.sdz.decorator.DecorJour;
import com.sdz.decorator.DecorNuit;
import com.sdz.decorator.Item;

public class Panneau extends JPanel
{
private Item decor;
/*
* @param decor
* */
public Panneau(Item decor)
{
super();
this.decor=decor;
}
/*
* Par défaut
* */
public Panneau()
{
this.decor=new DecorJour(this);
}
public void paintCoponent(Graphics g)
{
this.decor.paintComponent(g);
}
}

package com.sdz.decorator;
import java.awt.Graphics;
import javax.swing.JPanel;

public abstract class Item
{
/* conteneur parent */
protected JPanel parent;
/* Constructeur avec paramètres
* @param width
* @param height
*/
public Item(JPanel pan)
{
this.parent=pan;
}

/* Constructeur par défaut */
public Item()
{

}
public void paintComponent(Graphics g)
{
this.parent.getGraphicsConfiguration();
}
}

package com.sdz.decorator;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

public class DecorJour extends Item
{
/*
*
* */
public DecorJour()
{
super();
}

/*
* @param width
* @param height
* */
public DecorJour(JPanel pan)
{
super(pan);
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);

//Ciel bleu
g.setColor(Color.blue);
g.fillRect(0, 0, this.parent.getWidth(),this.parent.getHeight()-this.parent.getHeight()/3);

//Pelouse
g.setColor(Color.green);
g.fillRect(0, this.parent.getHeight()-this.parent.getHeight()/3,this.parent.getWidth(),this.parent.getHeight());

//Le soleil
g.setColor(Color.yellow);
g.fillOval(this.parent.getWidth()-this.parent.getWidth()/4,this.parent.getWidth()/12,this.parent.getWidth()/6,this.parent.getWidth()/6);
}
}

package com.sdz.decorator;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

public class DecorNuit extends Item
{
/*
*
* */
public DecorNuit()
{
super();
}

/* @param pan */
public DecorNuit(JPanel pan)
{
super(pan);
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);
}

//La nuit
g.setColor(Color.black);
g.fillRect(0, 0, this.parent.getWidth(),this.parent.getHeight()-this.parent.getHeight()/3);

//Pelouse
g.setColor(new Color(0,138,0));
g.fillRect(0, this.parent.getHeight()-this.parent.getHeight()/3,this.parent.getWidth(),this.parent.getHeight());

//La lune
g.setColor(Color.white);
g.fillOval(this.parent.getWidth()-this.parent.getWidth()/4,this.parent.getWidth()/12,this.parent.getWidth()/6,this.parent.getWidth()/6);
}

import javax.swing.JFrame;
public class Fenetre extends JFrame
{
public Fenetre()
{
this.setSize(300,300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Decorateur");
this.setResizable(false);
this.setContentPane(new Panneau());
}
public static void main (String[]args)
{
Fenetre fen=new Fenetre();
fen.setVisible(true);
}
}





5 réponses

Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 879
Il faut que tu mettes ton code dans une méthode !
j'ai corrigé comme suivant:

package com.sdz.decorator;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

public class DecorNuit extends Item
{
/*
*
* */
public DecorNuit()
{
super();
}

/* @param pan */
public DecorNuit(JPanel pan)
{
super(pan);
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);


//La nuit
g.setColor(Color.black);
g.fillRect(0, 0, this.parent.getWidth(),this.parent.getHeight()-this.parent.getHeight()/3);

//Pelouse
g.setColor(new Color(0,138,0));
g.fillRect(0, this.parent.getHeight()-this.parent.getHeight()/3,this.parent.getWidth(),this.parent.getHeight());

//La lune
g.setColor(Color.white);
g.fillOval(this.parent.getWidth()-this.parent.getWidth()/4,this.parent.getWidth()/12,this.parent.getWidth()/6,this.parent.getWidth()/6);
}
}

maintenant il montre aucun erreur
mais affiche une fênetre vide
aidez moi svp
DecorJour s'affiche, mais DecorNuit s'affiche pas
j'ai corrigé une erreur dans la classe panneau

...............................................................
..............................................................
public void paintComponent(Graphics g)
{
this.decor.paintComponent(g);
}
Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 879
Les méthodes que tu redéfinis dans une classe fille doit avoir strictement le même nom que celle de la classe mère, sinon ça ne peut pas marcher.

Pour vérifier ce genre de problème je te conseilles de systématiquement rajouter l'annotation @Override à la méthode que tu redéfinis, ainsi si pour une raison ou une autre cette méthode ne correspond pas à celle de la classe mère tu auras une erreur ce qui te permettras de corriger le problème.

Exemple :

@Override // The method paintCoponent of type Panneau must override or implement a supertype method
public void paintCoponent(Graphics g)
{
    this.decor.paintComponent(g);
}

Alors que si tu renommes correctement cette méthode pour surcharger la classe JPanel ça marche :

@Override
public void paintComponent(Graphics g)
{
    this.decor.paintComponent(g);
}
merci beaucoup vous êtes sympa