Datagrid - présentation d'une requete en grille

Soyez le premier à donner votre avis sur cette source.

Snippet vu 22 184 fois - Téléchargée 27 fois

Contenu du snippet

Cette classe est une dérivée de Jtable.
Elle permet d'afficher les données d'un resultset sous forme de grille.

Source / Exemple :


/**

  • @author duss
  • /
import javax.swing.*; // Librairie graphique import javax.swing.event.*; import javax.swing.table.AbstractTableModel; import java.awt.Color; import java.sql.*; /**
  • Classe permettant de construire une Jtable à partir d'un resultset
  • Les booléens sont affichés comme des checkbox
*
  • /
public class DataGrid extends JTable { private ResultSet res; private tModel model; public DataGrid(ResultSet rs, String tName) { res = rs; model = new tModel(res); setName(tName); setModel(model); setSelectionMode(ListSelectionModel.SINGLE_SELECTION); } public DataGrid(ResultSet rs) { res = rs; model = new tModel(res); setModel(model); setSelectionMode(ListSelectionModel.SINGLE_SELECTION); } public void setValues(ResultSet rs) { model = new tModel(rs); setModel(model); } public void setModif(boolean mod) { model.setModif(mod) ; } class tModel extends AbstractTableModel { private DbManager dbm = new DbManager(); private String[] columnNames = null; private Object[][] data = null; private boolean modif = false; public tModel(ResultSet res) { columnNames = getColNames(res); data = makeData(res); } // Méthode qui renvoit un Object[][] // à partir d'un ResultSet pour l'élaboration d'un DataGrid // @args -> le ResultSet public Object[][] makeData(ResultSet res) { ResultSetMetaData infos = null; Object[][] data = null; int colCount = 0; try { infos = res.getMetaData(); colCount = infos.getColumnCount(); } catch (SQLException E) { JOptionPane.showMessageDialog(null,"Erreur de connexion à la base. Veuillez contacter votre administrateur système","Connexion",JOptionPane.WARNING_MESSAGE); } int rowCount = this.recordCount(res); int i,j = 0; data = new Object[rowCount][colCount]; try { // Remplissage de data for (i = 0 ; i < rowCount ; i++) { res.absolute(i+1); for (j = 0 ; j < colCount ; j++) { int type = infos.getColumnType(j+1); switch (type) { case Types.CHAR : case Types.VARCHAR : case Types.LONGVARCHAR : data[i][j] = res.getString(j+1); break; case Types.TINYINT : { if ( infos.getPrecision(j+1) == 1) data[i][j] = new Integer(res.getInt(j+1)); else if (res.getInt(j+1) == 0) data[i][j] = new Boolean(false); else data[i][j] = new Boolean(true); break; } case Types.SMALLINT : case Types.INTEGER : data[i][j] = new Integer(res.getInt(j+1)); break; case Types.DATE : data[i][j] = res.getDate(j+1); break; default : break; } } } } catch (SQLException E) { JOptionPane.showMessageDialog(null,"Erreur de connexion à la base. Veuillez contacter votre administrateur système","Connexion",JOptionPane.WARNING_MESSAGE); } return data; } // Méthode qui renvoit le nom des colonnes d'un ResultSet // @args -> le ResultSet public String[] getColNames(ResultSet res) { ResultSetMetaData infos = null; String[] colName = null; int colCount = 0; try { infos = res.getMetaData(); colCount = infos.getColumnCount(); } catch (SQLException E) { JOptionPane.showMessageDialog(null,"Erreur de connexion à la base. Veuillez contacter votre administrateur système","Connexion",JOptionPane.WARNING_MESSAGE); } int j = 0; colName = new String[colCount]; try { //Remplissage de colName for (j = 0 ; j < colCount ; j++) colName[j] = infos.getColumnName(j+1); } catch (SQLException E) { JOptionPane.showMessageDialog(null,"Erreur de connexion à la base. Veuillez contacter votre administrateur système","Connexion",JOptionPane.WARNING_MESSAGE); } return colName; } public int getColumnCount() { return columnNames.length; } public void setModif(boolean mod) { modif = mod; } public int getRowCount() { return data.length; } public String getColumnName(int col) { return columnNames[col]; } public Object getValueAt(int row, int col) { String str = ""; if (data[row][col] == null) return str; else return data[row][col]; } public Class getColumnClass(int c) { return getValueAt(0,c).getClass(); } public boolean isCellEditable(int row, int col) { return modif; } public void setValueAt(Object val,int row, int col) { data[row][col] = val; fireTableCellUpdated(row, col); } } }

Conclusion :


Bon j'ai pas eu le temps de commenté trop mon code.
C'est promis je vais le faire !!

A voir également

Ajouter un commentaire Commentaires
Messages postés
3
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
16 décembre 2004

et class dans la ligne
"public class getColumnClass(int c) {"
doit être avec un C majuscule
Messages postés
1
Date d'inscription
dimanche 9 février 2003
Statut
Membre
Dernière intervention
11 décembre 2004

J'ai juste trouvé quelques erreurs (à mon avis)

il manque la fonction recordCount
Dans ce genre je suppose:
private int recordCount(ResultSet rs)
{
int result = 0;
try
{
int pos = rs.getRow();
if (rs.first())
{
do{
result ++ ;
}while (rs.next());
}
rs.absolute(pos);
}catch (Exception e)
{
e.printStackTrace();
}
return result;
}
, la ligne: private DbManager dbm = new DbManager();
est en trop
et il faut remplacer Types.char par Types.CHAR

Sinon je débute en écran java et ça ma permis de faire une grille facilement Merci
Messages postés
23
Date d'inscription
samedi 19 juin 2004
Statut
Membre
Dernière intervention
20 janvier 2005

c'est quoi ce bordel j'ai jamais ecris ca moi !
Messages postés
23
Date d'inscription
samedi 19 juin 2004
Statut
Membre
Dernière intervention
20 janvier 2005

interressant mais inutilisable a premiere vue
Comment tu fais pour utiliser tout ca ???

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.