IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

Pb positionnement et redimensionnement


Sujet :

Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 148
    Par défaut Pb positionnement et redimensionnement
    Bonsoir à tous,

    Je suis en train de m'arracher les cheveux sur un problème de positionnement et de redimensionnement de composants.
    En gros, la partie de mon appli concernée fait en sorte d'afficher, pour un utilisateur donné, la liste de ses comptes classés par banque.
    Je veux présenter cela en mettant une étiquette donnant le nom de la banque avec en dessous la table récupérant les comptes de cette banque.
    Je veux que chacun de ces blocs prenne toute la largeur disponible et soit placé au-dessous du précédent, avec un séparateur entre chaque bloc.
    Je veux que l'ensemble de ces blocs soit placé en haut du conteneur. Si le conteneur est trop grand, je veux que l'espace libre soit sous le dernier bloc (normal puisque je veux que le premier soit en haut de la page). Si le conteneur est trop petit, un JScrollPane contenant l'ensemble des blocs et contenu dans le conteneur principal permettra de visualiser l'ensemble des données.

    Pour cela, j'ai fait ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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();
    		}
    	}
    }
    Mais je ne comprends pas pourquoi j'obtiens cela :

    Nom : Résultat.jpg
Affichages : 53
Taille : 36,5 Ko

    Auriez-vous une idée parce que moi je ne sais plus quoi faire là ...
    Merci d'avance à ceux qui auront pris la peine de me lire.

    P.S.: il faut savoir qu'en fait, ce que je présente ici n'est qu'une partie de la classe ListeTest. En fait, je l'utilise pour lister aussi d'autres choses comme les opérations d'un compte, les utilisateurs ... Ceci est donc une version épurée utilisée uniquement pour les comptes. Le conteneur appelé principal doit obligatoirement être en BorderLayout car j'y ajoute un autre petit panel au sud, et pour les opérations, un panel au nord.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 148
    Par défaut
    Ca y est, c'est bon !
    Pour résoudre mon problème, j'ai d'abord affecté une largeur préférée aux tables en dur (à tâtons pour que ça rende ce que je voulais lorsque la fenêtre appelante a sa taille préférée et fait de même avec le scrollpane pour qu'il s'adapte à son contenu. J'ai aussi créé un nouveau panel (encore !) que je mets en BorderLayout et auquel j'ajoute mon scrollpane au nord (pour que les données s'affichent en haut de la page).
    Pour résumer, panelBanques est en GridBagLayout et contient tous les blocs labelBanque/tableComptes et leur séparateurs.
    Puis, panelBanques est inséré dans un scrollpane, qui est lui-même inséré au nord du nouveau panel en BorderLayout. C'est ce panel qui est inséré au centre de principal.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/03/2014, 12h13
  2. Positionnement de blocs aprés redimensionnement en Css
    Par fats1 dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 02/04/2013, 20h26
  3. Réponses: 13
    Dernier message: 06/09/2007, 19h35
  4. Positionner et redimensionner une fenetre d'un exécutable
    Par cquadjul dans le forum C++Builder
    Réponses: 1
    Dernier message: 07/08/2006, 16h15
  5. Redimensionnement des Paquets IP sur un Réseau Local
    Par Bonoboo dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 15h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo