2017-03-11 3 views
0

J'ai un JTable 4x4 avec des valeurs par défaut. L'utilisateur peut changer la taille de JTable. Après avoir changé la taille à par exemple. 6x6, les valeurs par défaut sont effacées et l'utilisateur peut taper le sien. Comment les amener à une table Integer? J'essayais d'utiliser getValueAt() et setValueAt() de ma classe de modèle mais les champs JTable étaient toujours effacés après avoir cliqué sur une autre cellule.Comment obtenir la valeur de redimensionnable JTable

class MyTableModel extends AbstractTableModel { 

int size; 
private String[] columnNames = { "Stan 1", "Stan 2", "Stan 3", "Stan 4" }; 

private Object[][] defaultValues = new Object[][] { 
     { "5", "15", "10", "0"}, 
     { "10", "10", "-20", "30"}, 
     { "40", "0", "50", "-30"}, 
     { "60", "0", "20", "-10"}}; 

private Object[][] newData = null; 

public MyTableModel(int x) { 
    size = x; 
} 

@Override 
public int getRowCount() { 
    return size; 
} 

@Override 
public int getColumnCount() { 
    return size; 
} 

@Override 
public String getColumnName(int columnIndex) { 
    if(columnIndex == 0) return null; 
    else return "Stan " + Integer.toString(columnIndex); 
} 

@Override 
public Class getColumnClass(int columnIndex) { 
    return Integer.class; 
} 

@Override 
public boolean isCellEditable(int rowIndex, int columnIndex) { 
    return true; 
} 

@Override 
public Object getValueAt(int rowIndex, int columnIndex) { 
    if(size == 4) 
     return defaultValues[rowIndex][columnIndex]; 
    else { 
     newData = new Object[size][size]; 
     return newData[rowIndex][columnIndex]; 
    } 
} 

@Override 
public void setValueAt(Object value, int rowIndex, int columnIndex) { 
    if(size == 4) 
     defaultValues[rowIndex][columnIndex] = value; 
    else 
     newData[rowIndex][columnIndex] = value; 

    fireTableCellUpdated(rowIndex, columnIndex); 
} 
} 
+0

Veuillez publier un [mcve] valide afin que nous puissions exécuter et tester nous-mêmes votre code. Cela devrait être un petit programme, assez petit pour être publié sur ce site en tant que texte formaté en code, devrait compiler, exécuter et nous montrer votre problème. –

Répondre

1

Il n'y a pas besoin d'un TableModel personnalisé ou de passer outre la méthode getValueAt (...) et setValueAt (...).

Si vous souhaitez modifier les données dans le DefaultTableModel, vous pouvez simplement utiliser la méthode setDataVector(...).