Mon setValueAt ne fonctionne pas.
Bonjour,
je sollicite un coups de mains car je bloque depuis plusieurs jours et je ne trouve pas la source de mon problème.
La classe affiche un tableau vide correspondant a une matrice carrée "lanceur.matrice" de taille "lanceur.taille" (qui sont des variables statique de la classe lanceur).
Je souhaite éditer les valeurs des cases pour remplir ma matrice.
http://tof.canardpc.com/preview/a5c6...3d2fb7a1ef.jpg
J'ai créé un modele avec AbstractTableModel
et défini isCellEditable et setValueAt.
Le problème : quand je saisi une valeur dans le tableau et que je valide, l'enregistrement ne se fait pas.
Auriez vous des pistes que je pourrais explorer ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class fenetresaisie extends JFrame {
JFrame fenetre = new JFrame();
JPanel contenu = new JPanel();
fenetresaisie() {
//parametre de la fenetre
fenetre.setTitle("Projet 6");
fenetre.setSize(500,300);
fenetre.setLocationRelativeTo(null);
fenetre.setResizable(true);
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//affectation d'un gestionnaire de disposition
GridLayout disposition = new GridLayout(2,2);
contenu.setLayout(disposition);
//creation d'untableau des entetes
Integer[] entete = new Integer[lanceur.taille];
for(int i=0; i<lanceur.taille; i++){
entete[i] = i;
}
//affichage du tableau
JTable tableau = new JTable(new modeletab(lanceur.matrice, entete));
//TEST modif données
tableau.setValueAt(4,1,1);
contenu.add(new JScrollPane(tableau));
//TEST bricole pour affichage
JButton valider = new JButton("OK");
affich gogo = new affich();
valider.addActionListener(gogo);
contenu.add(valider);
//y ajouter le contenu et le rendre visible
fenetre.setContentPane(contenu);
fenetre.setVisible(true);
}
}
class affich implements ActionListener {
public void actionPerformed(ActionEvent evenement){
for(int X=0; X<lanceur.taille; X++){
for(int Y=0; Y<lanceur.taille; Y++){
System.out.print("|"+lanceur.matrice[X][Y]+"|");
}
System.out.print("\n");
}
}
}
//classe modele personalisée
class modeletab extends AbstractTableModel {
private Integer[][] donnee;
private Integer[] titre;
public modeletab(Integer[][] donnee , Integer[] titre){
this.donnee = donnee;
this.titre = titre;
}
public int getRowCount() {
return this.donnee.length;
}
public int getColumnCount() {
return this.titre.length;
}
public Integer getValueAt(int row, int col){
return this.donnee[row][col];
}
public boolean isCellEditable(int row, int col){
return true;
}
public void setValueAt(Integer val,int row, int col){
lanceur.matrice[row][col]= val;
fireTableCellUpdated(row,col);
}
} |