2010-04-01 4 views
1

J'ai un nombre variable de tableaux bidimensionnels. La première dimension est variable, la seconde dimension est constante. -à-dire:Nombre variable de tableaux bidimensionnels dans un grand tableau

Object[][] array0 = { 
{"tim", "sanchez", 34, 175.5, "bla", "blub", "[email protected]"}, 
{"alice", "smith", 42, 160.0, "la", "bub", "[email protected]"}, 
... 
}; 

Object[][] array1 = { 
{"john", "sdfs", 34, 15.5, "a", "bl", "[email protected]"}, 
{"joe", "smith", 42, 16.0, "a", "bub", "[email protected]"}, 
... 
}; 

... 

Object[][] arrayi = ... 

Je générer ces tableaux avec une boucle for:

for (int i = 0; i < filter.length; i++) { 
    MyClass c = new MyClass(filter[i]); 
    //data = c.getData(); 
} 

Où « filtre » est un autre tableau qui est rempli d'informations qui indique « MyClass » comment remplir le tableaux. "getData()" renvoie l'un des i nombre de tableaux.

Maintenant, j'ai juste besoin d'avoir tout dans un grand tableau bidimensionnel. i.e. .:

Object[][] arrayComplete = { 
{"tim", "sanchez", 34, 175.5, "bla", "blub", "[email protected]"}, 
{"alice", "smith", 42, 160.0, "la", "bub", "[email protected]"}, 
... 
{"john", "sdfs", 34, 15.5, "a", "bl", "[email protected]"}, 
{"joe", "smith", 42, 16.0, "a", "bub", "[email protected]"}, 
... 
... 
}; 

En fin de compte, je besoin d'un tableau 2D pour alimenter mon swing TableModel.

Une idée sur la façon d'accomplir cela? Ça me fait mal à l'esprit maintenant.

+0

Voir cet exemple simple de construction d'un 'TableModel' en utilisant un 'Collection', comme suggéré par @Bill K. http://stackoverflow.com/questions/2541037/i-have-to-select-the-checkbox-two-times- to-check-uncheck-in-jtable/2541265 # 2541265 – trashgod

Répondre

7

Votre coup de tête sera considérablement réduit si vous commencez à penser en termes d'objets et de collections au lieu de tableaux. Sérieusement, travailler avec des tableaux comme celui-ci devient trop complexe et très rapide! C'est vraiment la raison pour laquelle la programmation OO a été inventée. Commencez avec l'objet le plus simple: Utilisateur. Il semble que l'utilisateur contienne son prénom et son nom, son âge, d'autres informations et son adresse e-mail.

Maintenant, tout ce que vous avez une collection d'utilisateurs? Trivial à gérer!

Ensuite, vous devez mapper cet ensemble d'utilisateurs au modèle de table pivotante. Une méthode simple toArray() peut renvoyer le tableau à une dimension que vous voulez. Créer un tableau bidimensionnel à partir de ceux-ci devrait être facile, etc. (bien que je ne sois pas sûr qu'un tableau à deux dimensions soit la solution)

De même, créez un constructeur Person qui prend Object [] pour que vous Vous n'avez pas besoin de changer la façon dont vos objets sont créés. Les créer comme des tableaux comme vous le faites est réellement efficace.

Si c'est encore confus après cela, nous devrions comprendre pourquoi vous alimentez votre modèle de table avec un tableau - est-ce vraiment nécessaire? Généralement, une collection d'objets serait beaucoup plus facile à gérer.

(Désolé les multiples modifications. D'une certaine façon, je remarque toujours plus après avoir frappé sauver ...)

+0

Merci pour votre aide, mais je ne comprends pas ce que vous dites. Je ne crée pas non plus mes "personnes", je les récupère d'une page web. Mon programme est beaucoup plus compliqué que cet exemple. J'ai essayé de le rendre aussi simple que possible et maintenant j'ai de la difficulté à appliquer votre solution à mon programme actuel. Je suppose que ce que vous dites est que j'ai quelques erreurs structurales majeures, mais je suis sûr de savoir comment le gérer correctement. – qlb

+0

Mon objet Person est chargé de récupérer les données d'une page Web. Le constructeur "MyClass" prend cet objet-personne et place l'information au format jTableModel. Mais maintenant j'ai plusieurs objets Person. Désolé, peut-être mon exemple était un peu faux, comme je l'ai cassé au problème d'ajouter un tas de tableaux 2d ensemble à un grand tableau 2d. – qlb

+0

Le moyen optimal serait d'implémenter votre propre JTableModel et de stocker une collection d'objets "Person". Quand une requête arrive dans votre modèle de table, récupérez la Personne correctement numérotée de votre collection, puis renvoyez l'attribut de cet objet qui correspond à la colonne demandée. L'objet JTableModel devient votre traduction (controller) entre votre modèle (Person) et view (JTable). –

2

Je comprends que la table Swing utilise tableau, mais cela ne signifie pas que vous devriez aussi! Faites ce que Bill décrit et divisez vos données en classes d'objets, puis insérez-les dans votre table, une ligne à la fois. Cela gardera votre représentation de données agréable.

Le basculement est pour "affichage" et "entrée" SEULEMENT. Il ne devrait pas être où vous stockez les données ni comment vous représentez les données.

1

Vous devriez écouter les autres conseils donnent, mais si vous insistez à faire ce que vous avez l'intention à l'origine à faire, voici comment:

public static Object[][] concat(Object[][]... arrays) { 
    int length = 0; 
    for (Object[][] comp : arrays) { 
     length += comp.length; 
    } 
    Object[][] ret = new Object[length][]; 
    int offset = 0; 
    for (Object[][] comp : arrays) { 
     System.arraycopy(comp, 0, ret, offset, comp.length); 
     offset += comp.length; 
    } 
    return ret; 
} 

Alors maintenant, par exemple, vous pouvez effectuer les opérations suivantes :

Object[][] arr1 = { 
     { "A" }, 
     { "B" }, 
    }; 
    Object[][] arr2 = { 
     { "1" }, 
     { "2" }, 
    }; 
    Object[][] arr3 = { 
     { "x", "x" }, 
     { "y", "y" }, 
    }; 
    Object[][] all = concat(arr1, arr2, arr3); 
    System.out.println(Arrays.deepToString(all)); 
    // prints "[[A], [B], [1], [2], [x, x], [y, y]]" 

Vous pouvez également l'utiliser comme ceci:

Object[][] all = new Object[0][]; 
    all = concat(all, arr1); 
    all = concat(all, arr2); 
    all = concat(all, arr3); 
    // : 
    // maybe more... like in a loop 

    System.out.println(Arrays.deepToString(all)); 
    // prints "[[A], [B], [1], [2], [x, x], [y, y]]" 
Questions connexes