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

Java Discussion :

[Débutant][Conception] Erreur avec une classe interne


Sujet :

Java

  1. #1
    Membre à l'essai
    Inscrit en
    juin 2003
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 15
    Points : 12
    Points
    12
    Par défaut [Débutant][Conception] Erreur avec une classe interne
    Bonjour.

    j'ai une classe MyTableView, qui herite de TableView.

    Cette derniere classe possede RowView et CellView comme classe interne.

    j'ai besoin de crée MyRowView et MyCellView, qui herite de RowView et de CellView.

    Par extension, MyRowView et MyCellView devraient etre des classes internes a MyTableView.

    cependant, j'ai besoin de les séparé en fichiers.
    donc

    j'ai crée un fichier pour ma classe MyCellView, et dans mon constructeurs je fait appel au super().

    cependant, java me sort une erreur :
    fr/netconception/core/editor/MyCellView.java [29:1] an enclosing instance that contains fr.netconception.core.utils.TableView.CellView is required

    j'imagine que c'est un probleme de debutant malgré le fait de ne l'avoir jamais eu avant

    j'espere que vous saurez m'aider !

    Bonne journée a tous et merci

  2. #2
    Membre émérite
    Avatar de Ioan
    Profil pro
    Inscrit en
    juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 737
    Points : 2 945
    Points
    2 945
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class TableView{
    	public TableView(){
     
    	}
    	class RowView{
    		public RowView(){}	
    	}	
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class MyRowView extends TableView.RowView{
    	public MyRowView(){
    		(new TableView()).super();	
    	}
    }
    Et pour conclure, tu devrais sérieusement penser à revoir l'architecture de ton appli
    Bon courage.
    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

  3. #3
    Membre à l'essai
    Inscrit en
    juin 2003
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    hum ...

    je devrais revoir l'archi de mon appli ?
    ah ?

    si tu pouvais me dire pourquoi ca m'avancerait.

    juste un precision, la classe TableView existe deja, et fait parti de l'API Swing HTML.

    avec les editorKit tout ca

    Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class MyRowView extends TableView.RowView{ 
       public MyRowView(){ 
          (new TableView()).super();    
       } 
    }
    je ne voit absolument pas l'interet de faire :
    (new TableView()).super();

    n'est ce pas apellé le constructeur de TableView dans le constructeur de RowView ???

    il y a quelque chose que je n'ai pas préciser.

    reelement, le constructeur de MyRowView prend en parametre :
    (Element elem, JEditorPane ed)

    le probleme qui est derriere est :
    mon JEditorPane est bien defini dans MyTableView.
    c'est cette derniere classe qui crée MyRowView, et qui passe mon JEditorPane en parametre de son constructeur.

    cet editeur est bien defini dans MyTableView, et dans le constructeur de MyRowView, cette variable est a null.

    je soupconne le fait que ca soit des classes internes , et que ca fasse "interference" si je peux dire. j'ai du mal a comprendre pourquoi je n'arrive pas a recuperer mon JEditorPane dans le constructeur.

    c'est pour cela que j'essaie de separé les fichiers, pour voir si ca peut changer quelque chose.

    je vais mettre quand meme un bout de mon code :

    Cette classe est une classe interne a MyTableView :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class MyRowView extends MyTableView.RowView implements InteractiveView {
            private HTMLEditorPane editeur;
     
            public MyRowView(Element elem,HTMLEditorPane ed) {
                super(elem);
                this.fElement = elem;
                this.editeur = ed;
                /* ici, si je met un system.out.println, je ne le verrais pas dans
                * ma console. je ne sais meme pas pourquoi. de plus
                * c'est ici que ed est egal a null alors que dans le code suivant, la
                * variable editeur est bien instancié.
                */
            }
    Voici la methode de MyTableView créant l'instance de MyRowView :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        protected RowView createTableRow(Element elem) {
            Object o = elem.getAttributes().getAttribute(StyleConstants.NameAttribute);
            if (o == HTML.Tag.TR) {
                //editeur = instance de HTMLEditorPane != null
                return new MyRowView(elem,editeur);
            }
            return null;
        }
    en esperant que ca va vous eclairer !

    merci.

  4. #4
    Membre à l'essai
    Inscrit en
    juin 2003
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    bon ... jviens de creer une nouvelle classe TableViewTest et les passages se font bien.

    j'ai du faire une erreur de programmation.

    par contre, je suis toujours tenté de comprendre l'erreur avec la classe incluse

    le probleme d'origine de ce topic.

    j'aimerais aussi savoir pourquoi mon architecture a un probleme

    merci !

  5. #5
    Membre émérite
    Avatar de Ioan
    Profil pro
    Inscrit en
    juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 737
    Points : 2 945
    Points
    2 945
    Par défaut
    Bonjour,
    Citation Envoyé par Devil Redneck
    par contre, je suis toujours tenté de comprendre l'erreur avec la classe incluse
    Ta classe interne fais partie d'une classe "englobante". L'appel à super (en dehors de cette classe englobante) nécessite une "référence" à cette classe. Une possibilité pour faire cela est de passer une instance précise devant l'appel à super.
    Citation Envoyé par Devil Redneck
    j'aimerais aussi savoir pourquoi mon architecture a un probleme
    Etre obligé de redéfinir des classes internes comme classes normales, ne me parais pas quelque chose de normal.
    Je ne peux pas vraiment t'en dire plus, sachant que je ne sais pas vraiment ce que tu veux faire. De plus tu utilises des classes que je ne connais pas (HTMLEditorPane par exemple, ca fais pas partie du jdk ???)
    Il y a peut-être une facon plus évidente d'arriver au même but, c'est tout. C'est pour ca que je parlais de revoir "l'architecture" de ton appli.
    Bonne chance.
    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

  6. #6
    Membre à l'essai
    Inscrit en
    juin 2003
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    d'accord

    HTMLEditorPane, a titre d'info, est une sous-classe de JTextPane.

    j'ai redefini ces classes puisque mon application doit reproduire un "word" mais pour l'edition de page HTML.
    j'ai donc besoin de redimensionner les tableaux, et les cellules.

    la classe TableView est responsable de l'affichage des tableaux dans le JTextPane (HTMLEditorPane dans ce cas) et ses classes internes sont responsables de l'affichade des lignes et des cellules de tableaux.

    pour pouvoir les redimensionner j'ai donc eu besoin de les redefinir afin de pouvoir capter les evenements souris dessus tout simplement.

    bon apres c'est compliqué tout ca derriere mais je precise a titre d'infos

    en tout cas merci !

    mon probleme n'est pas resolu dans la globalité mais j'ai eu mon explication pour la classe englobante parfait !

    bonne journée a tous !

    (et je n'oublie pas le RESOLU )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur avec une classe
    Par Pumataghju dans le forum C++
    Réponses: 21
    Dernier message: 08/03/2013, 20h54
  2. Erreur avec une classe
    Par 16gsyncro dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/05/2010, 13h40
  3. [POO] Erreur de syntaxe avec une classe
    Par sirbaldur dans le forum Langage
    Réponses: 5
    Dernier message: 10/01/2007, 14h30
  4. [C#][WebServices] Appel methode avec une classe en paramètre
    Par bran_noz dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/09/2004, 17h41
  5. [Thread] Erreur dans une classe interne
    Par totof2308 dans le forum Général Java
    Réponses: 5
    Dernier message: 03/06/2004, 09h15

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