224 lines
6.9 KiB
Java
224 lines
6.9 KiB
Java
package fr.blankoworld.donnees;
|
|
|
|
import java.sql.ResultSet;
|
|
import java.sql.ResultSetMetaData;
|
|
import java.sql.SQLException;
|
|
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JScrollPane;
|
|
import javax.swing.JTable;
|
|
import javax.swing.table.AbstractTableModel;
|
|
import java.awt.Dimension;
|
|
import java.awt.GridLayout;
|
|
|
|
import fr.blankoworld.connexionBDD.Connexion;
|
|
|
|
public class JTableModel extends JPanel {
|
|
private static final long serialVersionUID = 1L;
|
|
|
|
// Utilise pour le debugage, lors de l'insertion de donnees (modification)
|
|
// private boolean DEBUG = false;
|
|
|
|
public JTableModel(Connexion connectionObject, String requete) {
|
|
super(new GridLayout(1,0));
|
|
|
|
JTable table = new JTable(new MyTableModel(connectionObject, requete));
|
|
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
|
|
table.setFillsViewportHeight(true);
|
|
|
|
// Ajout de la table dans un panneau deroulant.
|
|
JScrollPane scrollPane = new JScrollPane(table);
|
|
|
|
//Ajout du panneau deroulant dans ce panneau ci.
|
|
add(scrollPane);
|
|
}
|
|
|
|
class MyTableModel extends AbstractTableModel {
|
|
private static final long serialVersionUID = 1L;
|
|
|
|
private String[] columnNames;
|
|
private Object[][] data;
|
|
|
|
public MyTableModel(Connexion connectionObject, String requete){
|
|
ResultSet resultat = connectionObject.getQueryResult();
|
|
|
|
try {
|
|
// On catalogue l'ensemble des donnees relatives a la table resultante (pas le contenu mais les donnees de colonnes, et le nombre de lignes)
|
|
ResultSetMetaData rsmd = resultat.getMetaData();
|
|
|
|
// Nombre de colonnes (Commence a 1 !)
|
|
int i = rsmd.getColumnCount();
|
|
|
|
// Donner les entetes de colonnes
|
|
String[] enteteColonnes = new String[i];
|
|
for (int j = 1; j < i + 1; j++) {
|
|
enteteColonnes[j - 1] = rsmd.getColumnName(j);
|
|
}
|
|
|
|
// Nombre de lignes
|
|
int nbreLigne = 0;
|
|
while (resultat.next()){
|
|
nbreLigne++;
|
|
}
|
|
|
|
// Tableau de donnees
|
|
Object[][] tableauDonnees = new Object[nbreLigne][i];
|
|
for(int ligne = 0; ligne < nbreLigne; ligne++){
|
|
for(int colonne = 0; colonne < i; colonne++){
|
|
tableauDonnees[ligne][colonne] = "";
|
|
}
|
|
}
|
|
|
|
//On refait la requete qui semble avoir fonctionne la premiere fois
|
|
connectionObject.sendQuery(requete);
|
|
ResultSet donnees = connectionObject.getQueryResult();
|
|
|
|
// Incrementeur de ligne
|
|
int incrementeur = 0;
|
|
|
|
while (donnees.next()) {
|
|
//traitement des autres lignes
|
|
for (int j = 1; j < i + 1; j++) {
|
|
tableauDonnees[incrementeur][j - 1] = donnees.getObject(j);
|
|
}
|
|
incrementeur++;
|
|
}
|
|
|
|
columnNames = enteteColonnes;
|
|
data = tableauDonnees;
|
|
|
|
} catch (SQLException e) {
|
|
// On remplit par des tableaux vides
|
|
columnNames = null;
|
|
data = null;
|
|
}
|
|
|
|
// // Jeux de tests (pour voir si cela fonctionne)
|
|
// columnNames = new String[] {"First Name",
|
|
// "Last Name",
|
|
// "Sport",
|
|
// "# of Years",
|
|
// "Vegetarian"};
|
|
//
|
|
// data = new Object[][] {
|
|
// {"Mary", "Campione",
|
|
// "Snowboarding", new Integer(5), new Boolean(false)},
|
|
// {"Alison", "Huml",
|
|
// "Rowing", new Integer(3), new Boolean(true)},
|
|
// {"Kathy", "Walrath",
|
|
// "Knitting", new Integer(2), new Boolean(false)},
|
|
// {"Sharon", "Zakhour",
|
|
// "Speed reading", new Integer(20), new Boolean(true)},
|
|
// {"Philip", "Milne",
|
|
// "Pool", new Integer(10), new Boolean(false)}
|
|
// };
|
|
}
|
|
|
|
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) {
|
|
return data[row][col];
|
|
}
|
|
|
|
/*
|
|
* Commentaire donne par Sun, concernant les prochaines methodes
|
|
* 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("--------------------------");
|
|
// }
|
|
}
|
|
|
|
/**
|
|
* Create the GUI and show it. For thread safety,
|
|
* this method should be invoked from the
|
|
* event-dispatching thread.
|
|
*/
|
|
// private static void createAndShowGUI() {
|
|
// //Create and set up the window.
|
|
// JFrame frame = new JFrame("TableDemo");
|
|
// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
//
|
|
// //Create and set up the content pane.
|
|
// JTableModel newContentPane = new JTableModel();
|
|
// newContentPane.setOpaque(true); //content panes must be opaque
|
|
// frame.setContentPane(newContentPane);
|
|
//
|
|
// //Display the window.
|
|
// frame.pack();
|
|
// frame.setVisible(true);
|
|
// }
|
|
//
|
|
// public static void main(String[] args) {
|
|
// //Schedule a job for the event-dispatching thread:
|
|
// //creating and showing this application's GUI.
|
|
// javax.swing.SwingUtilities.invokeLater(new Runnable() {
|
|
// public void run() {
|
|
// createAndShowGUI();
|
|
// }
|
|
// });
|
|
// }
|
|
}
|