filpinpin | 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 :
- String[] columnNames={ "Titre","Nom", "Prénom",
- "Adresse" };
- maJTable= new JTable();
- tableModel = new MyDefaultTableModel(columnNames);
- TableSorter sorter = new TableSorter(tableModel);
- tableModel.setSorter(sorter);
- maJTable.setModel(sorter);
- sorter.setTableHeader(maJTable.getTableHeader());
- Object[][] newData ={
- {"Monsieur","LOWRY", "SAM","5 rue de la fontaine 75005 PAris" }};
- 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 :
- public class MyDefaultTableModel extends DefaultTableModel {
- /* --- Attributs --- */
- /** Le TableSorter associé. */
- private TableSorter sorter;
- /** Le tableau des noms de colonnes du modele. */
- private String[] columnNames;
- /** Le nombre de colonne du modele. */
- private int numberColumn;
- /** Le tableau de données du modele, les cellules de la table. */
- private Object[][] tableData;
- private static boolean DEBUG = false;
- public MyDefaultTableModel(String[] p_columnNames) {
- columnNames = p_columnNames;
- }
- public void setSorter(TableSorter sorter) {
- this.sorter = sorter;
- }
- public void deleteRow(int row) {
- this.removeRow(row);
- //fireTableRowsDeleted(row, row);
- }
- public void updateTableData(Object[][] p_data) {
- tableData = p_data;
- fireTableStructureChanged();
- }
- public int getColumnCount() {
- return columnNames.length;
- }
- public String getColumnName(int col) {
- return columnNames[col];
- }
- public void setColumnName(String name, int i) {
- columnNames[i] = name;
- }
- public int getRowCount() {
- if (tableData != null)
- return tableData.length;
- else
- return 0;
- }
- public Class getColumnClass(int c) {
- return getValueAt(0, c).getClass();
- }
- public Object getValueAt(int row, int col) {
- return tableData[row][col];
- }
- public boolean isCellEditable(int row, int col) {
- return false;
- }
- public void setValueAt(Object value, int row, int col) {
- tableData[row][col] = value;
- fireTableCellUpdated(row, col);
- }
- }
|
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 :
- String[] columnNames={ "Titre","Nom", "Prénom",
- "Adresse" };
- final DefaultTableModel modele= new DefaultTableModel(columnNames,0);
- JTable maTable= new JTable(modele);
- 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! |