Probleme abstracttablemodel

profiter Messages postés 205 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 15 mars 2013 - 16 déc. 2011 à 12:55
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 16 déc. 2011 à 16:03
Bonjour,
j'ai un probleme dans mon tablemodel : je veux ajouter une methode qui permer d'ajouter automatiquement une colonne dans le jtable lors du clic sur un button mais des erreurs comme d'habitude :
voila ma classe qui herite du abstracttablemodel
class MyTableModel extends AbstractTableModel {


private String[] columnNames = new String[lignes];
private Object[][] data = new Object[lignes][colonnes];
//columnNames = entete ;
//data = contenu_table ;
public void affecter(){
this.columnNames = entete ;
this.data = contenu_table ;

}

public int getColumnCount() {
return columnNames.length;
}

public int getRowCount() {
return data.length;
}

public String getColumnName(int col) {
return columnNames[col];
}

public Object getValueAt(int row, int col) {
// System.out.println("suis je");
return data[row][col];
}

/*
* JTable uses this method to determine the default renderer/
* editor for each cell. If we didn't implement this method,
* then the last column would contain text ("true"/"false"),
* rather than a check box.
*/
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}

/*
* Don't need to implement this method unless your table's
* editable.
*/
public boolean isCellEditable(int row, int col) {
//Note that the data/cell address is constant,
//no matter where the cell appears onscreen.
if (col < 2) {
return false;
} else {
return true;
}
}

/*
* Don't need to implement this method unless your table's
* data can change.
*/
public void setValueAt(Object value, int row, int col) {
if (DEBUG) {
System.out.println("Setting value at " + row + "," + col
+ " to " + value
+ " (an instance of "
+ value.getClass() + ")");
}

data[row][col] = value;
fireTableCellUpdated(row, col);

if (DEBUG) {
System.out.println("New value of data:");
printDebugData();
}
}

private void printDebugData() {
int numRows = getRowCount();
int numCols = getColumnCount();

for (int i=0; i < numRows; i++) {
System.out.print(" row " + i + ":");
for (int j=0; j < numCols; j++) {
System.out.print(" " + data[i][j]);
}
System.out.println();
}
System.out.println("--------------------------");
}
protected Vector dataVector;

protected Vector columnIdentifiers;
public void addColumn()
{
int nbRow this.getRowCount(), nbCol this.getColumnCount();

this.data = new Object[nbRow][nbCol+1];
Object[][] tmp = new Object[nbRow][nbRow];
tmp = this.data ;

for(int i = 0 ; i< nbRow ; i++){
for(int j = 0 ;j

4 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
16 déc. 2011 à 14:07
Bonjour,

Si getValueAt(0, c) est null, tu ne peux pas appeler de méthode dessus. Je pense qu'il faut que tu gères ca, soit en levant une exception soit en retournant null si getValueAt(0, c) est null
0
profiter Messages postés 205 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 15 mars 2013 8
16 déc. 2011 à 14:22
merci Julien39 (ca fait bien longtemps qu'on c'est communiquer : je souhaite que tu es bien )


j'ai trouvé l'erreur c'est seulement dans la methode meme la voila corrigé
public void addColumn() 
           {
int nbRow this.getRowCount(), nbCol this.getColumnCount();

Object[][] tmp = new Object[nbRow][nbRow];
tmp = this.data ;
this.data = new Object[nbRow][nbCol+1];


for(int i = 0 ; i< nbRow ; i++){
for(int j = 0 ;j<= nbCol ; j++){
if(j != nbCol){
this.data[i][j] = tmp[i][j]; 
}else{
this.data[i][nbCol] = new Double(0);
}

}

}
//Cette méthode permet d'avertir le tableau que les données ont été modifiées
//Ce qui permet une mise à jours complète du tableau
this.fireTableDataChanged();
}

mais cette fois lorsque je clique sur le bouton qui fait apel a cette methode rien ne change dans mon jtable
pour bien eclaircir je me suis basé pour creer cette methode sur celle de addrow qui marche bien la voila :
public void addRow(Object[] data){
int indice 0, nbRow this.getRowCount(), nbCol = this.getColumnCount();

Object temp[][] = this.data;
this.data = new Object[nbRow+1][nbCol];

for(Object[] value : temp)
this.data[indice++] = value;


this.data[indice] = data;
temp = null;
//Cette méthode permet d'avertir le tableau que les données ont été modifiées
//Ce qui permet une mise à jours complète du tableau
this.fireTableDataChanged();
}

si vous pouvez detecter le probleme
merci
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
16 déc. 2011 à 16:01
CE que tu fais n'est pas terrible, attend une seconde, je te poste un code
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
16 déc. 2011 à 16:03
0
Rejoignez-nous