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

Composants Java Discussion :

MAJ de JList


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Par défaut MAJ de JList
    bonjour, je souhaite faire une mise a jour de ma JList avec un JBouton, mais je n'y arrive pas, j'ai une erreur de pointeur null !

    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
     
     
     DefaultListModel model = new DefaultListModel(); 
            choix = new JList(model);
            model.addElement("vert");
            model.addElement("rouge");
            model.addElement("bleu");
     
            choix.setSelectedIndex(1);
            choix.addListSelectionListener(this);
            boite1.add(choix);
            setVisible(true);
     
    /* ... */
     
    }
     
    public void actionPerformed(ActionEvent e) 
        {
        if (e.getActionCommand() == "EXIT") {System.exit(0);}
        if (e.getActionCommand() == "AJOUT") 
              {        model.addElement("bonjour");    }
     
        }
    des idées ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 128
    Par défaut
    A quel niveau se situe ton erreur, exactement?

  3. #3
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     model.addElement("bonjour");

    java.lang.NullPointerException

    at FenetreGraphique.actionPerformed(FenetreGraphique.java:94)

    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)

    at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)

    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)

    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)

    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)

    at java.awt.Component.processMouseEvent(Component.java:5100)

    at java.awt.Component.processEvent(Component.java:4897)

    at java.awt.Container.processEvent(Container.java:1569)

    at java.awt.Component.dispatchEventImpl(Component.java:3615)

    at java.awt.Container.dispatchEventImpl(Container.java:1627)

    at java.awt.Component.dispatchEvent(Component.java:3477)

    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)

    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)

    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)

    at java.awt.Container.dispatchEventImpl(Container.java:1613)

    at java.awt.Window.dispatchEventImpl(Window.java:1606)

    at java.awt.Component.dispatchEvent(Component.java:3477)

    at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)

    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)

    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)

    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)

    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)

    at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 128
    Par défaut
    Apparemment, l'action "AJOUT" est declenchée avant que model soit initialisé... Difficile de dire pourquoi ça arrive sans voir plus de code, mais tu peux pour commencer initialiser ton DefaultListModel avant d'implanter les actions (dans le constructeur de ta classe, par exemple).

  5. #5
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Par défaut
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*; //pour WindowsListener
    import javax.swing.event.ListSelectionEvent;
    import javax.swing.event.ListSelectionListener;
     
    import java.util.*;
     
    /*WindowListener permet de recupérer les différentes action sur la fanetre (fermeture, ouverture, active, icone...)*/
     
    /**
     * Write a description of class graphique here.
     * 
     * @author Xavier Hinfray & Laurence Arbon
     * @version 28/02/2006
     */
    public class FenetreGraphique extends JFrame implements WindowListener, ActionListener, ListSelectionListener
     
    {
     
        Container pm; // conteneur de JFrame : c'est la ou on va mettre les bouton et tout ca...
        JPanel boite1; //petit conteneur 
        JLabel message; //un texte a afficher
        JButton exitButton;
        JButton ajoutButton;
        Dimension tailleEcran;
     
        DefaultListModel model;
        JList choix;
         /**
         * Constructor for objects of class graphique
         */
        public FenetreGraphique(String titre)
        {
            super(titre);//titre est le titre de la fenetre
            tailleEcran=getToolkit().getScreenSize();
            setSize(new Dimension((int) tailleEcran.getWidth() - 10, (int) tailleEcran.getHeight() - 50)); // set the window size to fit the screen size
            setVisible(true); //ce qui aide à voir la fenetre !!!
            pm = getContentPane();//retourne le conteneur de notre nouvelle fenetre
            boite1 = new JPanel();
            boite1.setBackground(Color.cyan);
     
            // met le type de grille : ici points cardinaux
            pm.setLayout(new BorderLayout());
     
            // on ajoute au gestiionnaire de bordure notre contenaire
            pm.add(boite1, BorderLayout.CENTER);//peut aussi etre un point cardial (en ang, bien sur)
     
            message = new JLabel("I.S.E.P."); //le message
            message.setForeground(Color.red);//message en rouge
            boite1.add(message);
     
            exitButton = new JButton("Quitter");
            exitButton.addActionListener(this);//on dit a ActionListener qu'il doit réccupéré le click sur le bouton
            exitButton.setActionCommand("EXIT");//on lui donne ce que ca fait
            exitButton.setBackground(Color.blue);//couleur du bouton
            boite1.add(exitButton);//ajout du bouton au conteneur
     
            ajoutButton = new JButton("Ajouter");
            ajoutButton.addActionListener(this);
            ajoutButton.setActionCommand("AJOUT");
            boite1.add(ajoutButton);
     
            DefaultListModel model = new DefaultListModel(); 
            choix = new JList(model);
            model.addElement("vert");
            model.addElement("rouge");
            model.addElement("bleu");
     
            choix.setSelectedIndex(1);
            choix.addListSelectionListener(this);
            boite1.add(choix);
            setVisible(true);
     
        }
     
     
     
        /*on est obliger te mettre toutes ses fonction meme vide ! (30 mins de perdu la dessus ... Merci M. *****)*/
        public void windowClosing(WindowEvent e) {}
        public void windowActivated(WindowEvent e) {}
        public void windowDeactivated(WindowEvent e) {} 
        public void windowIconified(WindowEvent e) {}
        public void windowDeiconified(WindowEvent e) {}
        public void windowClosed(WindowEvent e) {}
        public void windowOpened(WindowEvent e) {}
     
     
        public void actionPerformed(ActionEvent e) //pareil, ici c'est obligatoire, meme si on met rien dedans
        {
        if (e.getActionCommand() == "EXIT") {System.exit(0);}
        if (e.getActionCommand() == "AJOUT") 
        {/*faire quelque chose qui ajoute bonjour à une Jlist !*/
            model.addElement("bonjour");
        }
     
        }
     
        public void valueChanged(ListSelectionEvent evt)  
        { 
     
            String test;
            test = (String)((JList)evt.getSource()).getSelectedValue();
     
     
        }
     
    }
    Comme ca tu as tout !

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 128
    Par défaut
    A priori je vois pas trop pourquoi ça plante... La seule idée qui me vient à l'esprit c'est que l'action soit declenchée (pourquoi ?????) au moment de l'ajout ou de l'initialisation de ton bouton. Essaie de placer l'initialisation du model avant celle du bouton...

    EDIT

    J'ai regardé une deuxième fois et là j'ai vu . To problème vient de la confusion entre attribut de la classe et variable locale. En effet quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DefaultListModel model = new DefaultListModel();
    tu initailises la variable locale model, pas l'attribut. Mets plutot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    model = new DefaultListModel();

  7. #7
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 819
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 819
    Par défaut
    Salut,

    Citation Envoyé par fregate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
        DefaultListModel model;
     
    ......    
     
        DefaultListModel model = new DefaultListModel();
    C'est quoi ça??????
    Tu initialises un objet local à ton constructeur, pas la propriété model de ton objet... donc normal que ce ne soit pas défini... même si ça porte le même nom!!!

    Remplace:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DefaultListModel model = new DefaultListModel();
    par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.model = new DefaultListModel();
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  8. #8
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Par défaut
    merci ca marche !

    Mais tu peux m'expliquer plus clairement la différence ? (désoler j'ai commencer le java il y a pas tres longtemps.)

  9. #9
    Membre chevronné Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /*on est obliger te mettre toutes ses fonction meme vide ! (30 mins de perdu la dessus ... Merci M. *****)*/
        public void windowClosing(WindowEvent e) {}
        public void windowActivated(WindowEvent e) {}
        public void windowDeactivated(WindowEvent e) {}
        public void windowIconified(WindowEvent e) {}
        public void windowDeiconified(WindowEvent e) {}
        public void windowClosed(WindowEvent e) {}
        public void windowOpened(WindowEvent e) {}
    je vois pas pourquoi les redefinir si tu ne les utilise pas, enleve le implements WindowListner d'en haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class FenetreGraphique extends JFrame implements 
    ActionListener, ListSelectionListener
     
    {
    et ne perds pas 30 minutes.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 128
    Par défaut
    Tout simplement, tu as défini un attribut model. Jusque là ça va. Seulement après, tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DefaultListModel model = new DefaultListModel();
    Pour le compilateur Java, c'est un déclaration d'une nouvelle variable - après tout, les déclarations se font toujours sous forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <type> <nom> [=<valeur>];
    Le fait que cette variable porte le même nom qu'un des attributs ne change pas au fait que ce n'est pas la même chose. Il est tout à fait possible d'utiliser une variable portant le même nom qu'un des attributs. Si c'est le cas, l'attribut se différencie par le mot clé this
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DefaultListModel model = new DefaultListModel(); //une variable. Sa durée de vie est limitée à celle de la méthode
    this.model = new DefaultListModel(); //ici tu initialises l'attribut. 'this' évite la confusion
    Avant, tu créais une variable, tu l'initialisais mais elle disparaissait à la fin de ton constructeur. L'attribut, lui, restait tout le temps non initialisé...

  11. #11
    Membre chevronné Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Par défaut
    Citation Envoyé par fregate
    merci ca marche !

    Mais tu peux m'expliquer plus clairement la différence ? (désoler j'ai commencer le java il y a pas tres longtemps.)
    le DefaultListModel accessible depuis le actionPerformed est celui la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DefaultListModel model;
    qui n'est pas initialise.

    l'autre (l'initialise) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DefaultListModel model = new DefaultListModel();
    n'est accesible que dans le constructeur; de plus il masque le premier a l'interieur du constructeur, donc toute reference a model dans le constructeur signifie le deuxieme.

    EDIT: sorry Marcin on postait en meme temps.

Discussions similaires

  1. Maj JList à partir d'un JButton
    Par kilou88 dans le forum Composants
    Réponses: 12
    Dernier message: 23/12/2010, 14h50
  2. Obligatoire : lisez les règles du forum : MAJ 06/08/2010
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 0
    Dernier message: 03/07/2008, 13h46
  3. MAJ d'une table sous SQL Server par insertion
    Par keish dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/06/2003, 16h23
  4. [web]maj de pages
    Par Gogoye dans le forum Web
    Réponses: 3
    Dernier message: 17/06/2002, 18h25

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