Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1002 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] Insertion/Suppresion d'une ligne dans une Jtable

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA] Insertion/Suppresion d'une ligne dans une Jtable

n°1069839
filpinpin
Posté le 03-05-2005 à 01:09:57  profilanswer
 

Bojour à tous,
 
La question semble être simple à la base, mais j'ai un problème d'insertion ou de suppression de ligne dans un JTable.
En fait, j'utilise mon propre DefautTableModel et que j'utilise avec le TableSorter du tutorial de JAva (dont le code est ici  
 pour avoir le tri des colonnes.
Je fais ma déclaration comme ci dessous:
 
 

Code :
  1. String[] columnNames={ "Titre","Nom", "Prénom",
  2.   "Adresse" };
  3.   maJTable= new JTable();
  4.   tableModel = new MyDefaultTableModel(columnNames);
  5.   TableSorter sorter = new TableSorter(tableModel);
  6.   tableModel.setSorter(sorter);
  7.   maJTable.setModel(sorter);
  8.                         sorter.setTableHeader(maJTable.getTableHeader());
  9.                         Object[][] newData ={
  10.                         {"Monsieur","LOWRY", "SAM","5 rue de la fontaine 75005 PAris" }};
  11.                         tableModel.updateTableData(newData);


 
J'ai ensuite un bouton pour ajouter ou supprimer une ligne dans le tableau, mais la methode défini dans mon modele de table ne marche pas:
De même, je ne peux pas utiiliser les methodes addRow ou removeRow du tableModel hérité du DefaultTableModel car si je fais tableModel.addRow ou removeRow, j'ai  un java.lang.ArrayIndexOutOfBoundsException: at java.util.Vector.removeElementAt(Unknown Source)  ?
 

Code :
  1. public class MyDefaultTableModel extends DefaultTableModel {
  2. /* --- Attributs --- */
  3. /** Le TableSorter associé. */
  4. private TableSorter sorter;
  5. /** Le tableau des noms de colonnes du modele. */
  6. private String[] columnNames;
  7. /** Le nombre de colonne du modele. */
  8. private int numberColumn;
  9. /** Le tableau de données du modele, les cellules de la table. */
  10. private Object[][] tableData;
  11. private static boolean DEBUG = false;
  12. public MyDefaultTableModel(String[] p_columnNames) {
  13.  columnNames = p_columnNames;
  14. }
  15. public void setSorter(TableSorter sorter) {
  16.  this.sorter = sorter;
  17. }
  18. public void deleteRow(int row) {
  19.  this.removeRow(row);
  20.  //fireTableRowsDeleted(row, row);
  21. }
  22. public void updateTableData(Object[][] p_data) {
  23.  tableData = p_data;
  24.  fireTableStructureChanged();
  25. }
  26. public int getColumnCount() {
  27.  return columnNames.length;
  28. }
  29. public String getColumnName(int col) {
  30.  return columnNames[col];
  31. }
  32. public void setColumnName(String name, int i) {
  33.  columnNames[i] = name;
  34. }
  35. public int getRowCount() {
  36.  if (tableData != null)
  37.   return tableData.length;
  38.  else
  39.   return 0;
  40. }
  41. public Class getColumnClass(int c) {
  42.  return getValueAt(0, c).getClass();
  43. }
  44. public Object getValueAt(int row, int col) {
  45.  return tableData[row][col];
  46. }
  47. public boolean isCellEditable(int row, int col) {
  48.  return false;
  49. }
  50. public void setValueAt(Object value, int row, int col) {
  51.  tableData[row][col] = value;
  52.  fireTableCellUpdated(row, col);
  53. }
  54. }


 
Donc j'avoue ne plus savoir qu'est ce qu'il faut faire exactement, car lorsqu'on fait une JTable toute simple, il n'y a pas de problème:
Si on prend l'exemple:

Code :
  1. String[] columnNames={ "Titre","Nom", "Prénom",
  2.   "Adresse" };
  3.   final DefaultTableModel modele= new DefaultTableModel(columnNames,0);
  4.   JTable maTable= new JTable(modele);
  5.   modele.addRow(new String [] {"Mr","Jones","Terry","5 square madison New York"});


 
ca marche parfaitement, mais si j'implemente un modele, c'est cuit :(
 
ESt-ce le fait d'utiliser le modele TableSorter qui fout la merde?
Si quelqu'un a une idée sur le sujet , je suis preneur!

mood
Publicité
Posté le 03-05-2005 à 01:09:57  profilanswer
 

n°1069847
the real m​oins moins
Posté le 03-05-2005 à 01:25:07  profilanswer
 

y'a un truc chelou là:

tableModel = new MyDefaultTableModel(columnNames);
 TableSorter sorter = new TableSorter(tableModel);
 tableModel.setSorter(sorter);


t'es sur de ce que tu fais? (passer la reference dans les deux sens à tes deux objets?)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1070001
filpinpin
Posté le 03-05-2005 à 10:13:26  profilanswer
 

the real moins moins a écrit :

y'a un truc chelou là:

tableModel = new MyDefaultTableModel(columnNames);
 TableSorter sorter = new TableSorter(tableModel);
 tableModel.setSorter(sorter);


t'es sur de ce que tu fais? (passer la reference dans les deux sens à tes deux objets?)


 
Non, tout va bien sur cette partie normalement.
De plus, je peux l'enlever du code et ne laisser que:

Code :
  1. maJTable= new JTable();
  2.   tableModel = new MyDefaultTableModel(columnNames);
  3.   maJTable.setModel(tableModel);


 
et la si je fais tableModel.addRow(test), ca foire!
 
En fait, je crois savoir d'où vient le problème:dans mon DefaultTableModel, j'utilise un tableau d'objet fixe:  Object[][] tableData;
 
et donc lors de l'ajout d'une ligne, j'ai un débordement.
Il faudrait reallouer le tableau, mais comment faire alors?  :??:

n°1070043
nraynaud
lol
Posté le 03-05-2005 à 10:35:55  profilanswer
 

on peut pas ajouter des données dans un tableModel construit autour d'un tableau, c'est logique, on peut pas ralonger ou racourcir un tableau.


---------------
trainoo.com, c'est fini
n°1070277
filpinpin
Posté le 03-05-2005 à 12:29:04  profilanswer
 

nraynaud a écrit :

on peut pas ajouter des données dans un tableModel construit autour d'un tableau, c'est logique, on peut pas ralonger ou racourcir un tableau.


 
Donc j'ai deux choix: ou bien je repasse en argument un tout nouveau tableau, ou alors j'utilise un vecteur à la place d'un tableau Object[][], ou alors, j'utilise par défaut les methodes natives du DefaultTableModel (et je vire tous les TableData et cie)

n°1071458
nraynaud
lol
Posté le 04-05-2005 à 11:10:32  profilanswer
 

je suis assez partisant du DefaultTableModel (a priori, vu que j'ai pas ton contexte).
 
Repasser tout, c'est niet, ça fait bosser la machine pour rien et on va encore dire que java ça rame.


---------------
trainoo.com, c'est fini

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] Insertion/Suppresion d'une ligne dans une Jtable

 

Sujets relatifs
incorporer chat java dans du phpinsertion fonts dans html
[JAVA] remplacer * par % dans un String?[Java] Trouver un charactère dans un tableau....[résolu]
[JAVA]Obtenir un sous arbre[JAVA] modifier le fond d un jpanel
exécuter un fichier java sans jbuilder[OS][JAVA][LGPL]La version 0.2 de JNode est arrivée !
[JAVA]Récuperer tout les noeuds d'un JTree selectionnésInclure un applet java sur une jsp d'un serveur silverstream
Plus de sujets relatifs à : [JAVA] Insertion/Suppresion d'une ligne dans une Jtable


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR