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 :

Nombre de lignes maximum d'une JTable


Sujet :

Composants Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Par défaut Nombre de lignes maximum d'une JTable
    Bonjour.
    A quoi tient la grandeur maximale d'une JTable ?

    Mon application reçoit des données de fichiers CSV propres à chaque utilisateur, mais comportant hélas 365 j x 24 h x 4 ¼h = 35.000 lignes de données ! Cela m'est imposé.
    Dès leur introduction dans un premier temps de l'application, il me faut éliminer les ± 11.900 lignes de données correspondant aux week-ends (± 52 x 2 x 24 x 4 = 9.984) et jours de congé (± 20 x 24 x 4 = 1.920).

    Je me propose de disposer de la liste de tous ces quarts d'heures dans une table à 'ScrollPane' allant être réduite dans un deuxième temps :
    - Après détermination d'une seule ligne correspondant à un samedi, mon application sélectionnerait et éliminerait toutes les lignes de données des samedis et des dimanches automatiquement.
    - Agrégation par 96 lignes des lignes de quart d'heures et d'heures pour ne plus avoir qu'une ligne par jour (365 x 24 = 8.760).

    Mais voilà ... je ne parviens pas à constituer une JTable de plus de 672 lignes. Nulle part dans la doc de Java de Sun ou d'Oracle, je n'avais pu voir cette limite. Quelqu'un pourrait-il me dire comment étendre cette limite jusqu'à 35.000 lignes ?

    Merci d'avance.

  2. #2
    Membre expérimenté
    Avatar de Chatanga
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 211
    Par défaut
    Il existe sans doute une limite stricte (genre Integer.MAX_VALUE), mais la mémoire vive disponible sera épuisée bien avant. De toute manière, un tel volume de données n’est pas pertinent pour une IHM. Soit tu l’affiches de manière synthétique (p. ex. sous forme de graphique), soit tu offres des possibilités de tri / filtrage.

    Voilà quand même un tableau de 1 000 000 lignes :

    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
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.SwingUtilities;
    import javax.swing.WindowConstants;
    import javax.swing.table.DefaultTableModel;
     
    public class BigTable {
     
    	public static void main(String[] arguments) {
    		SwingUtilities.invokeLater(new Runnable() {
     
    			@Override
    			public void run() {
     
    				DefaultTableModel model = new DefaultTableModel(1000000, 1);
    				for (int i = 0; i < model.getRowCount(); ++i) {
    					model.setValueAt(i, i, 0);
    				}
     
    				JFrame frame = new JFrame();
    				frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    				frame.add(new JScrollPane(new JTable(model)));
    				frame.pack();
    				frame.setVisible(true);
    			}
    		});
    	}
    }
    Si tu es bloqué à 672 lignes, c’est que ton code est buggé quelque part.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Par défaut
    Chatanga, merci pour ta réponse.

    Tu regardais dans la bonne direction. Ce qui comportait un bug n'était pas mon code mais mon fichier d'entrée de ± 35.000 lignes qui en comportait quelques-unes tout-à-fait vides. Inattendu. Leur raison d'être ? C'est la responsabilité de l'émetteur de ces fichiers CSV.
    Sur ces lignes vides bloquait mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                donnéesDEntrée.add(new Puissance(csvFile.getData().get(rowCount)[0],
                                                 csvFile.getData().get(rowCount)[1]));
    A propos, je ne comprends pas pourquoi aucune des expressions suivantes ne détecte des champs vides d'une ligne de ma List<String[]> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                    csvFile.getData().get(rowCount)[1] == null ||
                    csvFile.getData().get(rowCount)[1].isEmpty() ||
                    csvFile.getData().get(rowCount)[1].trim().equals("") )
    Merci d'avance

  4. #4
    Membre expérimenté Avatar de Doopeijii
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 215
    Par défaut
    En exécutant en debug (avec un point d'arrêt conditionnel au nombre de ligne propice), tu pourras peut être te rendre compte que ton "get(rowCount)" pète une erreur (je pense) d'où le fait qu'il ne fasse pas les tests. Cela n'est absolument pas sûr, mais à tester

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Par défaut
    Bonjour à tous.
    Au chargement des données des lignes du fichier CSV d'entrée, j'élimine simplement les lignes vides qui sont inutiles, et la lecture des lignes s'exécute jusqu'à la fin (35.150 lignes !) sans plus aucun problème.

    Merci Chatanga et Romain

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

Discussions similaires

  1. Nombre de caractères maximum d'une ligne de commande
    Par niepoc dans le forum Général Python
    Réponses: 1
    Dernier message: 06/01/2010, 21h21
  2. Réponses: 3
    Dernier message: 20/11/2006, 12h17
  3. Traitement D'un Nombre De Lignes Maximum
    Par Hisander dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/06/2006, 16h59
  4. Epaissir une ligne dans dans une JTable
    Par daninho dans le forum Composants
    Réponses: 9
    Dernier message: 26/01/2006, 14h43
  5. Nombre de ligne maxi dans une table ACCESS
    Par ygiraudeau dans le forum Access
    Réponses: 2
    Dernier message: 05/09/2005, 17h23

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