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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268
|
package pack;
//================================================//
//== IMPORTATION DES CLASSES EXTERNES UTILISEES ==//
//================================================//
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.text.ParseException;
import javax.swing.Box;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
//========================//
//== CORPS DE LA CLASSE ==//
//========================//
public class ListeTest extends JPanel
{
//*****************************//
//* DECLARATION DES VARIABLES *//
//*****************************//
JPanel principal = new JPanel();
//****************//
//* CONSTRUCTEUR *//
//****************//
public ListeTest() throws ParseException
{
super();
principal.setLayout(new BorderLayout());
InitListeComptes();
principal.revalidate();
this.setLayout(new BorderLayout());
this.add(principal, BorderLayout.CENTER);
this.revalidate();
}
//========================//
//== METHODES DE CLASSE ==//
//========================//
private void CreationTable(String requete, String[] titresColonnes, JTable table, String messageSiRequeteVide, JPanel panel, GridBagConstraints contrainte) throws SQLException
{
/* Exécution de la requête requete */
Statement state = Connexion.ouvrirConnexion().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = state.executeQuery(requete);
rs.last();
/* Si des enregistrements sont retournés par la requête */
if (rs.getRow() != 0)
{
/* Récupération des métadonnées du résultat de la requête */
ResultSetMetaData rsMeta = rs.getMetaData();
/* Déclaration d'un tableau recueillant les résultats de la requête */
Object[][] donnees = new Object[rs.getRow()][rsMeta.getColumnCount()];
/* Remplissage du tableau */
rs.beforeFirst();
int j = 1;
while (rs.next())
{
for (int i = 1 ; i <= rsMeta.getColumnCount(); i++)
donnees[j-1][i-1] = rs.getObject(i);
j++;
}
/* Fermeture des objets utilisés pour l'exécution de la requête et la récupération des résultats */
rs.close();
state.close();
/* Création d'un nouveau modèle de table avec redéfinition de la méthode isCellEditable(row, column)
* afin de rendre toutes les cellules de la table affichant les résultats de la requête non éditables */
String[] colonnes = titresColonnes;
DefaultTableModel tableNonEditable = new DefaultTableModel(donnees, colonnes)
{
public boolean isCellEditable(int row, int column)
{
return false;
}
};
/* Création de la table en utilisant le modèle précédemment défini */
table.setModel(tableNonEditable);
/* Modification du mode de sélection de la table afin que l'utilisateur ne puisse sélectionner qu'une seule ligne à la fois */
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
Box pan = Box.createVerticalBox();
pan.add(table.getTableHeader());
pan.add(table);
/* Ajout de ce conteneur au conteneur passé en paramètre panel */
panel.add(pan, contrainte);
}
/* Rafraîchissement du conteneur principal */
panel.revalidate();
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
// Construction de la table servant à l'affichage des comptes //
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
public void InitTable(int numeroBanque, JTable tableC, JPanel pane, GridBagConstraints constraint)
{
/* Requête donnant les comptes de la banque dont l'id est numeroBanque */
String req = new String("SELECT num_compte, " +
"libelle_compte, " +
date_creation_compte, " +
(COALESCE((SELECT SUM(montant) AS total_credit " +
"FROM operation O, type_operation T_O " +
"WHERE O.id_type_op = T_O.id_type_op " +
"AND T_O.sens_op = 'Crédit' " +
"AND O.num_compte = C.num_compte), 0) - COALESCE((SELECT SUM(montant) AS total_debit " +
"FROM operation O2, type_operation T_O2 " +
"WHERE O2.id_type_op = T_O2.id_type_op " +
"AND T_O2.sens_op = 'Débit' " +
"AND O2.num_compte = C.num_compte), 0)) AS solde " +
"FROM compte C " +
"WHERE C.id_user = " + Main.getNumeroUtilisateur() + " " +
"AND C.id_banque = " + numeroBanque + " " +
"ORDER BY num_compte");
/* Création du header de la table tableC */
String[] titresTable = {"NUMERO", "LIBELLE", "DATE DE CREATION", "SOLDE"};
/* Chaîne à afficher si aucun enregistrement n'est retourné */
String chaineSiReqVide = new String("Aucun compte enregistré.");
/* Création de la table avec les paramètres définis ci-dessus */
try
{
CreationTable(req, titresTable, tableC, chaineSiReqVide, pane, constraint);
}
catch (SQLException e)
{
e.printStackTrace();
}
pane.revalidate();
principal.revalidate();
}
public void InitListeComptes()
{
/* Requête listant les banques de l'utilisateur */
String reqBanques = new String("SELECT DISTINCT nom_banque, B.id_banque " +
"FROM banque B, compte C " +
"WHERE B.id_banque = C.id_banque " +
"AND C.id_user = " + Main.getNumeroUtilisateur() + " " +
"ORDER BY nom_banque");
try
{
/* Exécution de la requête */
Statement st = Connexion.ouvrirConnexion().createStatement();
ResultSet result = st.executeQuery(reqBanques);
result.last();
/* Récupération du nombre de banques renvoyées */
int nbBanques = result.getRow();
/* Création du conteneur devant être inséré dans le conteneur principal, et qui va contenir
* les étiquettes et les tables des comptes correspondant à chaque banque */
JPanel panelBanques = new JPanel(new GridBagLayout());
panelBanques.setBackground(Color.blue);
/* Définition des premières contraintes */
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.weighty = 0;
gbc.weightx = 0;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(5, 0, 5, 0);
/* Si l'utilisateur a enregistré des banques ... */
if (nbBanques != 0)
{
result.beforeFirst();
/* Variable utilisée pour définir la contrainte gridy */
int cellY = 0;
/* Compteur permettant de savoir si un séparateur doit être ajouté après un bloc étiquette/table d'une banque */
int m = 1;
/* Parcours du résultat de la requête */
while (result.next())
{
/* Définition de contraintes supplémentaires */
gbc.gridy = cellY;
gbc.anchor = GridBagConstraints.PAGE_START;
/* Ajout de l'étiquette contenant le nom de la banque examinée */
panelBanques.add(new JLabel(result.getString(1)), gbc);
/* Redéfinition de la contrainte gridy */
cellY++;
gbc.gridy = cellY;
/* Création de la table destinée à contenir les comptes de la banque examinée */
JTable tableComptes = new JTable();
InitTable(Integer.parseInt(result.getString(2)), tableComptes, panelBanques, gbc);
/* Incrémentation de cellY en vue de la prochaine boucle */
cellY++;
/* Si la banque examinée n'est pas la dernière, insertion d'un séparateur à panelBanques */
if (m < nbBanques)
{
gbc.gridy = cellY;
panelBanques.add(new JSeparator(SwingConstants.HORIZONTAL), gbc);
cellY++;
}
/* Incrémentation de m en vue de la prochaine boucle */
m++;
}
/* Insertion de panelBanques dans un JScrollPane */
JScrollPane scrollBanques = new JScrollPane(panelBanques);
/* Ajout de scrollBanques dans le conteneur principal */
principal.add(scrollBanques, BorderLayout.CENTER);
principal.revalidate();
}
else
{
System.out.println("Aucune banque");
}
result.close();
st.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
} |
Partager