Utiliser l'état d'une case à cocher dans une JTable pour faire une requette SQL
baratribord
Messages postés44Date d'inscriptionvendredi 14 mars 2008StatutMembreDernière intervention30 mai 2008
-
15 mai 2008 à 15:06
baratribord
Messages postés44Date d'inscriptionvendredi 14 mars 2008StatutMembreDernière intervention30 mai 2008
-
16 mai 2008 à 14:01
Bonjour,
J'ai écrit un programme qui lit les informations d'une base de données MySql et qui les affichent dans une JTable.
A cette JTable j'ai rajouté une case à cocher au bout de chaque ligne pour spécifier l'effacement des enregistrements selectionnés.
Le problème c'est que je ne sais comment accéder aux informations de ma table, ni comment les stocker pour générer ma requette SQL à partir du pseudo se trouvant dans la table des lignes selectionnées.
Mon plus gros problème se situe au niveau de l'utilisation des collections où un code comme celui-çi protected List<Object[]> rowValues_ = new ArrayList<Object[]>(); ; m'est vraiment trop barbare, enfin je n'arrive pas à l'exploiter sortie du contexte.
Je vous joins une partie du code pour situer donc le contexte :
// Chargement de mon pilote
Class.forName(pilote);
Connection connexion = DriverManager.getConnection("jdbc:mysql://localhost/mabase", "root", "toto");
Statement instruction = connexion.createStatement();
sql = "SELECT * FROM data";
ResultSet resultat = instruction.executeQuery(sql);
ResultSetTableModel tableModel = new ResultSetTableModel();
tableModel.updateModel(resultat);
JTable table = new JTable(tableModel);
JScrollPane JSP = new JScrollPane(table);
Fen.getContentPane().add(JSP,BorderLayout.CENTER);
Fen.pan.add(Fen.supp);//Affichage du bouton supprimer
Fen.validate();
class ResultSetTableModel extends AbstractTableModel {
protected String[] columnNames_ = {};
protected int columnCount_ = 0;
protected Class[] columnClasses_ = {};
/**
* Une liste pour stocker chaque ligne de valeurs.
* Chaque ligne sera elle même représentée par un tableau d'Object.
*/
protected List<Object[]> rowValues_ = new ArrayList<Object[]>();
/**
* les meta données du resultset représenté par ce TableModel
*/
protected ResultSetMetaData metaData_;
protected boolean editable_ = true;
public void updateModel(ResultSet rs) throws SQLException {
metaData_ = rs.getMetaData();
columnCount_ = metaData_.getColumnCount()+1;//+1 pour indiquer un élément de plus (lacase à cocher)
// allocation des tableaux pour stocker les noms des colonnes
// et le type (classes) des colonnes
columnNames_ = new String[columnCount_];
columnClasses_ = new Class[columnCount_];
int i;
for ( i = 1; i <= columnCount_-1; i++) {
columnNames_[i-1] = metaData_.getColumnName(i);
try {
columnClasses_[i-1] = Class.forName(metaData_.getColumnClassName(i));
}
catch (ClassNotFoundException clnfe) {
// normalement ce type d'exception ne devrait jamais être lancé
clnfe.printStackTrace();
System.exit(0);
}
}
columnNames_[i-1]="Supprimer";
columnClasses_[i-1] = Boolean.class;
// chargement des données dans la liste rowValues
// initialisation de la liste des lignes avec une liste vide
rowValues_ = new ArrayList<Object[]>();
// récuperation de chacune des lignes du ResultSet
while (rs.next()) {
//création d'un tableau d'objets pour récupérer les données d'une ligne
Object[] values = new Object[columnCount_+1-1];//+1
// recopie des valeurs de la ligne dans le tableau
for ( i = 1; i <= columnCount_-1; i++)
values[i-1] = rs.getObject(i);
// ajout du tableau à la liste des lignes
values[i-1] =true;//initialisation de la case à cocher
rowValues_.add(values);
}
fireTableStructureChanged();
}
public void setEditable(boolean edit) {
editable_ = edit;
}
//-----------------------------------------------------
// rédéfinitions des méthodes de l'interface TableModel
//-----------------------------------------------------
public boolean isEditable() {
return editable_;
}
public int getColumnCount() {
return columnCount_;
}
public int getRowCount() {
return rowValues_.size();
}
public String getColumnName(int col) {
return columnNames_[col];
}
public Class getColumnClass(int col) {
return columnClasses_[col];
}
public Object getValueAt(int row, int col) {
if (col == 11)
{
//values[row]=false;
//rowValues_.add(values);
}
return ((Object[]) (rowValues_.get(row)))[col];
}
public boolean isCellEditable(int row, int column) {
try {
return editable_ && metaData_.isWritable(column+1);
}
catch (SQLException e) {
return true;//si false on ne peut pas changer le statut de la case à cocher
}
}
public void setValueAt(Object value, int row, int column) {
Object[] dataRow = (Object []) rowValues_.get(row);
dataRow[column] = value;
}
}
En vous remerciant.
Bara
A voir également:
Utiliser l'état d'une case à cocher dans une JTable pour faire une requette SQL
nosferaltu0
Messages postés36Date d'inscriptionmardi 6 mai 2008StatutMembreDernière intervention 6 juin 2008 16 mai 2008 à 12:27
C'est la methode getValueAt() qui te permet d'acceder à un element de ta JTable.
change cette ligne (dans getValueAt)
return ((Object[]) (rowValues_.get(row)))[col];
par
return (rowValues_.get(row))[col];
rowValues_.get(row) te permet d'acceder à un l'Object[] donc le fait de rajouter [col] te permet d'acceder a ton Object.
Remplace aussi :
protected List<Object[]> rowValues_ = new ArrayList<Object[]>();
par
protected ArrayList<Object[]> rowValues_ = new ArrayList<Object[]>();