anisotrope
Messages postés35Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention14 mars 2006
-
25 sept. 2004 à 18:13
anisotrope
Messages postés35Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention14 mars 2006
-
26 sept. 2004 à 16:10
Bonjour,
j'ai ecrit une classe MonPanneau dans une classe Sp_souri :
public class Sp_souri implements MouseListener, MouseMotionListener {
MonPanneau panneau = new MonPanneau();
public class MonPanneau extends JPanel {
public void paintComponent(Graphics g) {
...
}
}
Utilisée en locale dans la classe Sp_souri ma classe MonPanneau fonctionne mais des que je veux l'utiliser depuis une classe exterieure les problemes commencent :
public class Ma_frame_detection extends JFrame{
public Ma_frame_detection(String title) {
super(title);
// je cree un onjet MonPanneau :
// mais Eclipse m'indique une erreur :
// No enclosing instance of type Sp_souri is accessible.
// Must qualify the allocation with an enclosing instance
// of type Sp_souri (e.g x. new A[] where x is an instance of
// Sp_souri
Sp_souri.MonPanneau panneau =
new Sp_souri.MonPanneau();
JButton bouton = new JButton("11");
panneau.add(bouton);
...
}
}
PS : les classes MonPanneau et Ma_frame_detection sont dans le meme package.
Toute aide sera la bienvenue j'essaie d'ecrire une application de reconnaissance de caracteres manuscrits ... Merci
anisotrope
Messages postés35Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention14 mars 2006 25 sept. 2004 à 20:16
Effectivement je pourrai la sortir de la classe Sp_souri
mais cela change quoi ?
Sais tu la signification du message :
No enclosing instance of type Sp_souri is accessible.
Must qualify the allocation with an enclosing instance
of type Sp_souri (e.g x. new A[] where x is an instance of
Sp_souri
merci je viens de commencer java ya 3 semaines et j'ai encore automatismes a avoir meme si eclipse m'aide pas mal.
kirua12
Messages postés1155Date d'inscriptionsamedi 17 janvier 2004StatutMembreDernière intervention29 avril 20117 26 sept. 2004 à 09:25
Il y a 2 types de classes imbriquées : les inners classes et les autres. Les inners classes sont considérées comme une instance de la classe englobante. Les autres sont considérées comme un type.
Pour pouvoir utiliser le type il ne faut pas déclarer une inner classe. Cela se fait en déclarant la classe imbriquée comme static
public class Sp_souri implements MouseListener, MouseMotionListener {
MonPanneau panneau = new MonPanneau();
public static class MonPanneau extends JPanel {
public void paintComponent(Graphics g) {
...
}
}
Ensuite tu crées ton instance
Sp_souri.MonPanneau panneau = new Sp_souri.MonPanneau();
Vous n’avez pas trouvé la réponse que vous recherchez ?
anisotrope
Messages postés35Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention14 mars 2006 26 sept. 2004 à 16:10
Heu on ne peut pas creer d'instance de classe static je crois
J'ai trouvé une syntaxe pour instancier ma classe interne (MonPanneau) dans une portion de code qui s'execute dehors (classe Ma_frame_detection) de la classe externe (Sp_souri ) :
public class Ma_frame_detection extends JFrame{
Ma_frame_detection(String title) {
super(title);
JButton bouton = new JButton("11");
JButton bouton2 = new JButton("12");
...
Sp_souri.MonPanneau panneau = Sp_souri.ihm.new MonPanneau2();
panneau.add(bouton);
panneau.add(bouton2);
...
}
}
C'est un peu tiré par les cheveux mais il fallait connaitre cette syntaxe !
:=)