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

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

Marsh Posté le 03-05-2005 à 01:09:57    

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!

Reply

Marsh Posté le 03-05-2005 à 01:09:57   

Reply

Marsh Posté le 03-05-2005 à 01:25:07    

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 ?
Reply

Marsh Posté le 03-05-2005 à 10:13:26    

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?  :??:

Reply

Marsh Posté le 03-05-2005 à 10:35:55    

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
Reply

Marsh Posté le 03-05-2005 à 12:29:04    

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)

Reply

Marsh Posté le 04-05-2005 à 11:10:32    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed