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

AWT/Swing Java Discussion :

Rafraichir un JScrollPane dans un actionListener


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Homme Profil pro
    Etudiant IUT informatique
    Inscrit en
    Juin 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant IUT informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 8
    Par défaut Rafraichir un JScrollPane dans un actionListener
    Bonjour, après maint essais, je viens ici pour vous posez mon problème en espérant que cela permettra de trouver une solution.
    Pour un projet d'ihm je doit créer un application.
    Dans cette app, je dois accéder à une base de donnée et ensuite afficher le resultat dans un JScrollPane en appuyant sur un bouton.
    Le problème survient quand, j'appuie sur le bouton, j'obtiens l'erreur : "Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException".
    Sauf que sans le bouton, (j'ai testé dans un autre projet), si je fais d'abord ma requête, puis que je crée mon JTable et enfin mon JScrollPane, tout marche très bien.

    voici le code du bouton, scroll est un membre de ma class et une instance de JScrollPane, requete est ma fonction qui me retourne un modele dans lequel il y a le resultat de la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    mmr.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e)
                    {
                        String requete = "select * from Joueur order by mmr desc";
     
                        scroll.add(new JScrollPane(new JTable(requete(con,requete))));
     
                    };
            });
    voici le code pour mon model :
    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
     
    public class ModèleDonnée extends AbstractTableModel implements TableModel{
        protected String[]nomColonnes = null;
        protected Object[][]données = new Object[0][0];
     
        public ModèleDonnée(String[]nom,Object[][]données)
        {
            nomColonnes = nom;
            this.données = données;
        }
     
        @Override
        public int getRowCount() {
            return données.length;
        }
     
        @Override
        public int getColumnCount() {
            return nomColonnes.length;
        }
     
        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            return données[rowIndex][columnIndex];
        }
     
        @Override
        public String getColumnName(int col)
        {
            return nomColonnes[col];
        }
     
        @Override
        public boolean isCellEditable(int row,int col)
        {
            return false;
        }
     
        @Override
        public void setValueAt(Object value,int row,int col)
        {
            données[row][col] = value;
        }
     
     
     
    }
    Donc voila mon problème.
    (il est possible que j'ai oublié des détails, n'hésitez pas à me les demandez).
    Merci de votre aide !

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    On n'en voit trop peu de ton code. Ce serait un minimum de pouvoir voir la déclaration de la variable scroll, son/ses affectation/s, son initialisation en particulier. Et montre-nous aussi la stacktrace.

    En revanche, tu dis :
    Citation Envoyé par onfiregun Voir le message
    scroll est un membre de ma class et une instance de JScrollPane
    et tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scroll.add(new JScrollPane(new JTable(requete(con,requete))));
    Donc, tu mets un JScrollPane dans un JScrollPane... c'est bien ça que tu fais ? Déjà que ça n'a pas de sens de faire ça (un scrollpane directement dans un scrollpane), en plus, on ne met pas de composant à scroller dans un scrollpane par la méthode add, mais par setViewportView(). Il n'est pas impossible que le layout manager du JScrollPane n'apprécie pas que tu lui colles un composant imprévu, un JScrollPane de surcroît.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre régulier
    Homme Profil pro
    Etudiant IUT informatique
    Inscrit en
    Juin 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant IUT informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 8
    Par défaut
    Merci de ta réponse.
    Pour le JScrollPane dans un autre JScrollPane, c'étais plus un test de détresse que autre chose, au départ j'avais écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    JTable table = new JTable(requete(con,requete));
    scroll = new JScrollPane(table);

    Ensuite voici tout mon code:
    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
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
     
    public class Fenetre extends JFrame {      
        protected JScrollPane scroll; // mais c ce scrollPane qu'il faut afficher et non la jtable, puisqu'il la contient(la JTable), je l'ai déjà fait dans menuPrinc
        private Connection con;
     
        public Fenetre() {
            super();
     
            scroll = new JScrollPane();
            try
            {
                con = DriverManager.getConnection(
                "jdbc:oracle:thin:@134.214.112.67:1521:orcl","p1603697","267785");
     
            }catch(SQLException e){}
            build();
        }
        public void build()
        {
            setTitle("Scoring League Of Legend");
            setContentPane(content());
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setResizable(false);
            pack();
            setVisible(true);
        }
        public JTabbedPane content()
        {
     
            JTabbedPane tabbedPane = new JTabbedPane();
            tabbedPane.setBackground(Color.LIGHT_GRAY);
            tabbedPane.setPreferredSize(new Dimension(1000, 700));
     
            tabbedPane.addTab("Menu principal", MenuPrinc());
            tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);
     
     
            tabbedPane.addTab("Ajouter joueur",ajouter());
            tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);
     
     
            tabbedPane.addTab("Lancer partie",lancerPartie());
            tabbedPane.setMnemonicAt(2, KeyEvent.VK_3);
     
     
            tabbedPane.addTab("Statistiques", stat());
            tabbedPane.setMnemonicAt(3, KeyEvent.VK_4);
     
            //The following line enables to use scrolling tabs.
            tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
     
            return tabbedPane;
        }
     
        public JPanel MenuPrinc(){ // ne plus toucher
            JPanel panel = new JPanel();
            panel.setBackground(Color.LIGHT_GRAY);    
            JPanel panelbouton = new JPanel();
            panelbouton.setBackground(Color.LIGHT_GRAY);
            scroll.setPreferredSize(new Dimension(550,600));
     
     
     
            JButton mmr = new JButton("Afficher joueurs triés par MMR");
            JButton role = new JButton("Afficher joueurs triés par rôle"); 
            JButton afficher = new JButton("Afficher champions");
     
     
            panelbouton.setLayout(new GridLayout(3,1,20,20));
            panel.setLayout(new FlowLayout(5,30,30)/*new BorderLayout(10,10)*/);
     
     
            panelbouton.add(mmr);
            panelbouton.add(role);
            panelbouton.add(afficher);
     
     
     
            //paneltable.setBorder(BorderFactory.createLineBorder(Color.BLACK));
            panel.add(scroll);        
            panel.add(panelbouton);
     
            mmr.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e)
                    {
                        String requete = "select * from Joueur order by mmr desc";
                        JTable table = new JTable(requete(con,requete));
                        scroll = new JScrollPane(table);
                        build();
                    };
            });
            return panel;
        }
     
        public JPanel ajouter()
        {
            JPanel label = new JPanel();
            JLabel Pseudo = new JLabel("Pseudo");
            JLabel Mmr = new JLabel("MMR");
            JLabel Main = new JLabel("Rank");
            label.add(Pseudo);
            label.add(Mmr);
            label.add(Main);
            //label.setLayout(new FlowLayout());
     
            JPanel tf = new JPanel();
            JTextField Pseudotf = new JTextField("          ");
            JTextField Mmrtf = new JTextField("          ");
            JTextField Maintf = new JTextField("          ");
            tf.add(Pseudotf);
            tf.add(Mmrtf);
            tf.add(Maintf);
            //tf.setLayout(new FlowLayout());
     
            JPanel bt = new JPanel();
            JButton ajouterjoueur = new JButton("Ajouter joueur");
            bt.add(ajouterjoueur);
     
            JPanel condense = new JPanel();
            condense.add(label);
            condense.add(tf);
            condense.setLayout(new GridLayout(3, 2));
     
            JPanel panel = new JPanel();
            panel.add(condense);
            panel.add(ajouterjoueur);
     
     
            return panel;
        }
     
     
     
     
        public JPanel lancerPartie(){
            JPanel panel = new JPanel();
            JLabel info = new JLabel("Label");
            panel.add(info);
            setVisible(true);
            return panel;
        }
     
        public JPanel stat()
        {
            JPanel label = new JPanel();
            JLabel Main = new JLabel("Main :                   ");
            JLabel Mainvalue = new JLabel("null");
            JLabel nombre = new JLabel("Nombre de partie(s) jouées :");
            JLabel nombrevalue = new JLabel("null");
            JLabel pourcent = new JLabel("Pourcentage de victoire :");
            JLabel pourcentvalue = new JLabel("null");
            label.add(Main);
            label.add(Mainvalue);        
            label.add(nombre);
            label.add(nombrevalue);
            label.add(pourcent); 
            label.add(pourcentvalue); 
            label.setLayout(new GridLayout(3, 2));   
     
            JPanel combo = new JPanel();
            Object[] liste = new Object[]{"Sélectionner joueur","Mettre array list nom joueur"};
            JComboBox selectjoueur = new JComboBox(liste);      
            combo.add(selectjoueur);
            //combo.setLayout(new GridLayout(1,1));  
            //Avec grid layout le bouton est énorme
     
            JPanel panel = new JPanel();
            setBackground(Color.orange);
            panel.add(combo);
            panel.add(label);
            panel.setLayout(new GridLayout(6,1)); 
            setVisible(true);
            return panel;
        }
     
        public ModeleDonnee requete(Connection con,String requête) // retourne une instance de ModeleDonnee
        {
            Statement stmt;
            ResultSet rs;
            ResultSetMetaData rsMeta;
            String []nom = null ;
            Object [][]colonnes = new Object[0][0];
            ModeleDonnee mod;
     
            try
            {
                stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
                rs = stmt.executeQuery(requête);
                rsMeta = rs.getMetaData();
                nom = new String[rsMeta.getColumnCount()];// On initialise notre tableau de nom de colonnes
     
                for(int i = 1; i <= rsMeta.getColumnCount(); i++) // On recupère les nom des colonnes
                {
                    nom[i-1] = rsMeta.getColumnName(i).toUpperCase();
                    //System.out.printf("%s ",nom[i-1]);
                }
     
     
                rs.last(); // on place le curseur à la fin 
                int nombreLignes = rs.getRow(); //on récupère le numéro de la ligne 
                rs.beforeFirst(); //on replace le curseur avant la première ligne 
                int nombreColonnes = rsMeta.getColumnCount();
                //System.out.println("Nombre de ligne(s) : "+nombreLignes+"\n"+"Nombre de colonne(s) : "+rsMeta.getColumnCount());
     
                colonnes = new Object[nombreLignes][nombreColonnes];
                //colonnes = new String[nombreLignes-1][nombreColonnes-1]; 
     
     
                while(rs.next())
                {   
                    Object obj[] = new Object[nombreColonnes];
                    for(int i = 0 ; i < nombreColonnes ; i++)
                    {
                        obj[i] = rs.getObject(i+1);
                    }
     
                    for(int el = 0 ; el < nombreColonnes ; el++)
                    {
                        colonnes [rs.getRow()-1][el] = obj[el];
                    }
     
                }
     
                stmt.close();
                rs.close();
            }catch(Exception e){}
            mod = new ModeleDonnee(nom, colonnes);
            if(mod == null)
                return null;
            else
                 return mod;
        }
     
        public static void main (String[]arg)
        {
            new Fenetre();
        }
    }

  4. #4
    Membre régulier
    Homme Profil pro
    Etudiant IUT informatique
    Inscrit en
    Juin 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant IUT informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 8
    Par défaut stacktrace
    Code console : 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
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    	at lol_stat.ModeleDonnee.getColumnCount(ModeleDonnee.java:33)
    	at javax.swing.JTable.createDefaultColumnsFromModel(JTable.java:1285)
    	at javax.swing.JTable.tableChanged(JTable.java:4386)
    	at javax.swing.JTable.setModel(JTable.java:3688)
    	at javax.swing.JTable.<init>(JTable.java:632)
    	at javax.swing.JTable.<init>(JTable.java:573)
    	at lol_stat.Fenetre$1.actionPerformed(Fenetre.java:126)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    	at java.awt.Component.processMouseEvent(Component.java:6533)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    	at java.awt.Component.processEvent(Component.java:6298)
    	at java.awt.Container.processEvent(Container.java:2236)
    	at java.awt.Component.dispatchEventImpl(Component.java:4889)
    	at java.awt.Container.dispatchEventImpl(Container.java:2294)
    	at java.awt.Component.dispatchEvent(Component.java:4711)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    	at java.awt.Container.dispatchEventImpl(Container.java:2280)
    	at java.awt.Window.dispatchEventImpl(Window.java:2746)
    	at java.awt.Component.dispatchEvent(Component.java:4711)
    	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    	at java.awt.EventQueue.access$500(EventQueue.java:97)
    	at java.awt.EventQueue$3.run(EventQueue.java:709)
    	at java.awt.EventQueue$3.run(EventQueue.java:703)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
    	at java.awt.EventQueue$4.run(EventQueue.java:731)
    	at java.awt.EventQueue$4.run(EventQueue.java:729)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
    BUILD SUCCESSFUL (total time: 3 seconds)

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par onfiregun Voir le message
    Merci de ta réponse.
    Pour le JScrollPane dans un autre JScrollPane, c'étais plus un test de détresse que autre chose, au départ j'avais écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    JTable table = new JTable(requete(con,requete));
    scroll = new JScrollPane(table);
    Mais ça ne te sera pas suffisant de toute manière : tu ne feras que changer la valeur d'une variable. Cela n'aura aucun effet sur ton affichage.

    Soit tu conserves une référence sur le panel surlequel tu fais panel.add(scroll); au début, et tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    JTable table = new JTable(requete(con,requete));
    scroll = new JScrollPane(table);
    panel.removeAll();
    panel.add(scroll);
    panel.revalidate();
    panel.repaint();
    Mais ça ne fonctionnera pas dans ton cas, parce que à ce que j'ai vu, tu ajoutes d'autres composants dans le panel en question. Il faudrait mettre un panel intermédiaire.

    Soit tu changes le viewport :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    JTable table = new JTable(requete(con,requete));
    scroll.setViewportView(table);
    scroll.revalidate();
    scroll.repaint();
    Pour ton problème d'exception, on voit que l'erreur est dans la classe de modèle, à la ligne 33 :
    at lol_stat.ModeleDonnee.getColumnCount(ModeleDonnee.java:33)
    at javax.swing.JTable.createDefaultColumnsFromModel(JTable.java:1285)
    A priori (parce que les numéros de ligne dans le message sont décalées par rapport à ton vrai source), ça serait dans cette méthode (à confirmer) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @Override
        public String getColumnName(int col)
        {
            return nomColonnes[col];
        }
    Il n'y a pas 36 raisons d'avoir une NPE à cet endroit, il n'y en a qu'une seule : nomColonnes est null. Il faut donc voir ta méthode de création de modèle.
    J'y vois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     mod = new ModeleDonnee(nom, colonnes);
    avec nom initialisé à null dans la méthode.
    nom ne prend une valeur que s'il n'y a pas d'exception dans les trois lignes qui précédent son initialisation, ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
                rs = stmt.executeQuery(requête);
                rsMeta = rs.getMetaData();
                nom = new String[rsMeta.getColumnCount()];// On initialise notre tableau de nom de colonnes
    Le souci, c'est que tu as :
    On ne fait jamais ça. Parce que s'il y a une exception, tu ne le verras pas. Au moins afficher la stacktrace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    catch(Exception e){
    e.printStackTrace();
    }
    A noter que dans ton code, les ressources sont très mal libérées : en cas d'exception justement, elles ne seront pas libérées. Comme tu fais des curseurs en plus, tu risques d'avoir plein de données inutiles qui stagnent en mémoire, et si tu fais beaucoup de requête, tu risques le outofmemory.
    Utile un try/with/resource, ne déclare pas tes variables de Statement, ResultSet, etc, à des km de l'endroit où tu les crées, mais à l'endroit où tu les crées au debut tu try/with/resource, qui s'occupera de les libérer pour toi proprement. Eviter également les statements simples, et préférer les "preparedstatement".
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre régulier
    Homme Profil pro
    Etudiant IUT informatique
    Inscrit en
    Juin 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant IUT informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 8
    Par défaut
    Merci de ta réponse ! =)
    Je corrige tous ça et je dis si ça fonctionne.

  7. #7
    Membre régulier
    Homme Profil pro
    Etudiant IUT informatique
    Inscrit en
    Juin 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant IUT informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 8
    Par défaut
    Merci pour tes réponses rapides et détaillées, ainsi que pour tes conseils
    Je clos le sujet, mais une dernière question.
    j'ai cherché mais je n'ai pas très bien compris, que font les méthodes revalidate() et repaint() dans ce cas-ci exactement ?

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par onfiregun Voir le message
    que font les méthodes revalidate() et repaint() dans ce cas-ci exactement ?
    revalidate() force un changement d'état dont va résulter un recalcul du layout. Ce n'est pas toujours nécessaire, car Swing peut le faire d'office, mais parfois, Swing peut ne pas le faire, pour éviter de le faire trop souvent : il laisse le programmeur décider quand le faire au mieux (en particulier, si on doit ajouter plusieurs composants, c'est mieux de le faire quand tous les composants sont ajoutés, plutôt que le faire à chaque ajout). Lorsque ce n'est pas fait, le layout reste en l'état, ce qui peut donner des effets graphiques indésirables (comme des composants cachés).
    De la même manière, repaint() redessine le composant. Les effets de changement de layout peuvent ne pas être répercutés sur l'UI et elle peut ne pas représenter l'état réel résultant de ce qu'on vient de faire.
    Je les ai mis par sécurité, parce que je ne pouvais pas tester en réel. Si tu les supprimes et que l'UI est bien affichée comme tu l'attends, alors ils n'étaient pas nécessaires.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre régulier
    Homme Profil pro
    Etudiant IUT informatique
    Inscrit en
    Juin 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant IUT informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 8
    Par défaut
    Merci beaucoup pour toutes tes réponses !
    Bonne continuation de vie ;-)

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

Discussions similaires

  1. jscrollpane dans jframe
    Par remy85 dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 31/05/2007, 20h56
  2. [VB6]Rafraichir label info dans bd access
    Par maniolo dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 07/08/2006, 22h13
  3. JScrollPane dans une JInternalFrame.. possible ?
    Par narsi1 dans le forum AWT/Swing
    Réponses: 14
    Dernier message: 08/06/2006, 13h57
  4. JScrollPane dans une JInternalFrame contenant un graphic
    Par Sirkiller dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 08/06/2006, 11h13
  5. [VB.NET] rafraichir une valeur dans une textbox
    Par grand_prophete dans le forum Windows Forms
    Réponses: 1
    Dernier message: 14/04/2006, 12h40

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