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

NetBeans Java Discussion :

Comment utiliser un Form étendant un autre Form avec Matisse ?


Sujet :

NetBeans Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Par défaut Comment utiliser un Form étendant un autre Form avec Matisse ?
    Salut à tous,

    Je commence à désespérer...Bon courage à ceux qui vont lire ce message car c'est un peu compliqué.

    J'utilise NetBeans 5.5 RC1 mais l'erreur se produit également avec les versions 5.0 et 5.5 beta 2 (j'ai tout essayé !), voici mon problème :

    Je souhaite créer avec le designer une "classe mère" (étendant JPanel et contenant un simple JLabel) qui me servira de base pour créer d'autres JPanel, toujours avec le designer.

    Dans mon projet, je crée donc un nouveau "JPanel Form" que je nomme TitledPanel. Dans la vue design, j'ajoute simplement un JLabel (nom de variable = labTitre) en haut de mon JPanel, je laisse le layout en Free design (NetBeans génère donc du code avec un GroupLayout). Je voudrais que le texte du JLabel soit égal à un champ titre que je vais ajouter manuellement dans le source de ma classe. Dans la propriété text de mon JLabel, j'utilise le Select Mode "Form Connection" et je tape "getTitre()" dans le champ "User code".
    Ensuite, je modifie le source de ma classe pour ajouter le champ titre et ses accesseurs + quelques petites choses, ce qui donne :

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     package tests.gui.components;
     
    import java.awt.Container;
    import java.awt.FlowLayout;
    import javax.swing.JPanel;
     
    public class TitledPanel extends javax.swing.JPanel {
     
        protected String titre;
     
        protected Container innerPane = new JPanel(new FlowLayout());
     
        public TitledPanel() {
            this("[Sans titre]");
        }
     
        public TitledPanel(String titre) {
            super();
            this.titre = titre;
            initComponents();
        }    
     
     
        /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         */
        // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
        private void initComponents() {
            labTitre = new javax.swing.JLabel();
     
            labTitre.setText(getTitre());
     
            org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
            this.setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(layout.createSequentialGroup()
                    .addContainerGap()
                    .add(labTitre, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
                    .addContainerGap())
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(layout.createSequentialGroup()
                    .addContainerGap()
                    .add(labTitre)
                    .addContainerGap(275, Short.MAX_VALUE))
            );
        }// </editor-fold>                        
     
        public String getTitre() {
            return this.titre;
        }
     
        public void setTitre(String titre) {
            this.titre = titre;
            this.labTitre.setText(titre);
        }
     
        public Container getInnerPane() {
            return this.innerPane;
        }
     
        public void setInnerPane(Container innerPane) {
            this.innerPane = innerPane;
        }
     
     
        // Variables declaration - do not modify                     
        private javax.swing.JLabel labTitre;
        // End of variables declaration                   
     
    }
    J'ai lu à cette adresse :

    http://wiki.netbeans.info/wiki/view/...ExtendingForms

    que la classe mère devait soit n'avoir aucun composant, soit avoir un container delegate défini. C'est que j'ai fait avec le champ innerPane et ses accesseurs.

    J'ai créé par la suite la classe TitledPanelBeanInfo comme indiqué à cette adresse :

    http://wiki.netbeans.info/wiki/view/...mContainerBean

    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
     package tests.gui.components;
     
    import java.beans.BeanDescriptor;
    import java.beans.SimpleBeanInfo;
     
    public class TitledPanelBeanInfo extends SimpleBeanInfo {
     
        public TitledPanelBeanInfo() {
            System.out.println("constructeur de TitledPanelBeanInfo");
        }
     
        public BeanDescriptor getBeanDescriptor() {
            BeanDescriptor desc = new BeanDescriptor(TitledPanel.class);
            desc.setValue("containerDelegate", "getInnerPane");
            return desc;
        }
     
    }
    Je compile le tout et je crée dans mon projet un nouveau "Bean Form" avec pour SuperClass ma classe mère TitledPanel.

    Le designer m'affiche bien un panel contenant un JLabel dont le texte est "[Sans titre]", je peux même changer via la propriété titre le texte du JLabel (je vois le texte changer sur le panel), mais dès que je clique sur le panel dans le designer :

    java.lang.NullPointerException
    at org.netbeans.modules.form.FormDesigner.pointFromHandleToComponentLayer(FormDesigner.java:529)
    at org.netbeans.modules.form.HandleLayer.convertPointToComponent(HandleLayer.java:1336)
    at org.netbeans.modules.form.HandleLayer.processMouseClickInLayoutSupport(HandleLayer.java:772)
    at org.netbeans.modules.form.HandleLayer.mousePressed(HandleLayer.java:1521)
    at java.awt.Component.processMouseEvent(Component.java:5485)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
    at java.awt.Component.processEvent(Component.java:5253)
    at java.awt.Container.processEvent(Container.java:1966)
    at java.awt.Component.dispatchEventImpl(Component.java:3955)
    at java.awt.Container.dispatchEventImpl(Container.java:2024)
    at java.awt.Component.dispatchEvent(Component.java:3803)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3889)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
    at java.awt.Container.dispatchEventImpl(Container.java:2010)
    at java.awt.Window.dispatchEventImpl(Window.java:1778)
    at java.awt.Component.dispatchEvent(Component.java:3803)
    [catch] at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
    Et je ne peux évidemment rien faire d'autre sur le panel (pas d'ajout de composant entre autres).

    Au passage et à priori, le constructeur de TitledPanelBeanInfo et la méthode getBeanDescriptor()) ne sont jamais appelés car pas de message dans la console.

    Est-ce que je me suis trompé quelque part ?

    Vous allez me dire que c'est un bug de NetBeans, j'avoue que je n'ai pas vraiment le courage, ni le temps de traduire ce message et de le soumettre à la communauté NetBeans.

    Quelqu'un aurait-il trouvé une autre façon de procéder pour contourner ce bug ?

    En d'autres termes, avez-vous réussi à utiliser un Form étendant un autre Form avec Matisse ?

    Et plus spécifiquement est-il possible d'hériter d'un Form étendant JPanel auquel on pourra ajouter des composants avec le designer ?

    Merci d'avance d'avoir tenu jusqu'ici,

    A+

    Laurent.

  2. #2
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Par défaut
    yep,

    je viens de poser le même type de message... aurais tu trouver une solution depuis le temps ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Par défaut Malheureusement non...
    pas pour l'instant.Si tu trouves quelque chose de ton côté, je suis preneur !

    Tu as essayé tout ce qui est dit à cette adresse ?

    http://wiki.netbeans.info/wiki/view/...ExtendingForms

    avec le container delegate et tout ?

    J'ai pas réessayé avec la 5.5, je te tiens au courant dès que j'ai le temps de faire ça.

  4. #4
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Par défaut
    Oui mais c'est vraiment pas clair...


    Une fois qu'on a fait la classe "TitledPanelBeanInfo", on en fait quoi ?

    Je continue à chercher ...

Discussions similaires

  1. Comment utiliser un bouton en simple onClick autre que submit
    Par Dendrite dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/11/2008, 16h49
  2. comment capter un evenement survenu sur une autre form?
    Par Jayceblaster dans le forum Windows Forms
    Réponses: 1
    Dernier message: 12/07/2007, 14h38
  3. Réponses: 1
    Dernier message: 06/05/2007, 10h43
  4. Réponses: 3
    Dernier message: 02/04/2007, 20h37
  5. [VB.NET] Utilisation d'une variable dans une autre form (!)
    Par neuropathie dans le forum Windows Forms
    Réponses: 5
    Dernier message: 08/12/2005, 13h09

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