Probleme de JPanel au centre

Messages postés
129
Date d'inscription
jeudi 30 mars 2006
Statut
Membre
Dernière intervention
2 décembre 2012
-
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
-
bonjour, tous le monde
je developpe une interface graphique avec swing. j'ai voulu faire un panel nomme authentifiction qui s'affiche au centre de panel de frame.
J'ai teste ce code mais le panel autentif s'affiche selon la taille de frame pas au centre exactement?? Est ce que vous pouvez m'aidez??
voici le code:

import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.border.TitledBorder;

public class Main {
    private JFrame cadre;
    private JPanel pane,pane_authentif;
    private JButton bouton_connexion;

    public Main()
    {
        cadre = new JFrame(" test ");
        cadre.setSize(600,400);
           
        pane = new JPanel (new BorderLayout());
        pane_authentif = new JPanel ();
        pane_authentif.setBorder(new TitledBorder("Authentification"));
        pane_authentif.setSize(200, 200);
        pane_authentif.setLocation(200, 200);
       
        bouton_connexion  =new JButton("Entrer");
        bouton_connexion .setSelected(true);
       
        pane_authentif.add(bouton_connexion);
        pane.add(pane_authentif,BorderLayout.CENTER);
       
        cadre.getContentPane().add(pane);
        cadre.setVisible(true);
    }
    public static void main(String[] args) {
            Main T=new Main();
    }
}

Merci beaucoup

28 réponses

Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

import java.awt.FlowLayout;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

public class Test {

    public Test() {
        JFrame  cadre = new JFrame(" test ");
        cadre.setSize(600,600);
        cadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             
        JPanel pane_authentif = new JPanel ();
        pane_authentif.setBorder(new TitledBorder("Authentification"));
        //<strike>pane_authentif.setOpaque(true);</strike>//si tu ne veux pas voir l'image
        pane_authentif.setOpaque(false);//sinon si tu veux voir l'image de fond
       
        JButton bouton_connexion  =new JButton("Entrer");
        bouton_connexion .setSelected(true);
        JTextField t= new JTextField(12);
              
        pane_authentif.add(new JLabel("login"));//pas besoin de créer une variable pour ça
        pane_authentif.add(t);

        pane_authentif.add(bouton_connexion);
  
 
        JLabel contentPane = new JLabel(new ImageIcon("img.png"));
        //NE METS PAS BORDERLAYOUT SI TU NE VEUX PAS QU'IL PRENNE TOUTE LA PLACE
        contentPane.setLayout(new FlowLayout());
        contentPane.add(pane_authentif);
      
        cadre.setContentPane(contentPane);//le layout par defaut du content pane c'est BorderLayout
    
        cadre.setVisible(true);
    }
  
    public static void main(String[] args) {
        new Test();
    }
}

Bref avant te continuer ton application entraine toi avec les layout et comprends toutes les subtilités...

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
129
Date d'inscription
jeudi 30 mars 2006
Statut
Membre
Dernière intervention
2 décembre 2012

Merci pour votre aide,
Comme vous avez dit lorsque je met  BORDERLAYOUT il prend TOUTE LA PLACE.
et si je met flowLayout le panel est affiche en haut. pas au centre.
j'ai essaye de faire setBounds pour le mettre au centre mais il ne se deplace pas toujours en haut...

est ce que je met borderLayout et je met des espaces vide pour north,west,east,soutn???
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

déjà oublie le setBounds, il n'est utile que pour un setLayout à null.... sinon essais de rentrer dans les joies du GridBagLayout qui te permettra de faire ce que tu veux et de placer tes composantss ou tu veux....... comme je te le dis plus entraine toi avec les layout

http://java.sun.com/docs/books/tutorial/uiswing/layout/using.html

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
En même temps, dans ta fenêtre tu vas avoir quoi? Tu peux pas retailler ta fenêtre afin que ton contenu sois pile dedans?
Je veux dire en dessous de ta zone d'authentification tu vas mettre quoi? rien?
Si il n'y a rien autant retrécir la fenêtre, non?
Toi tu voudrais avoir une fenêtre avec ta zone d'authentification au centre d'une grande fenêtre... moi je ferais une fenêtre de la taille de ta zone d'authentification au moins pas de soucis.
Genre un petit :                       cadre.pack();
et hop!
Sinon, si tu veux toujours avoir une grande fenêtre...amuses toi avec les Layout, mais bon je reste toujours dans mon avis... évite les BorderLayout!!!
++
<hr size="2" width="100%" />C'est après des heures de codage que j'ai compris pourquoi les mecs de Java ont choisi une tasse de café comme logo!
Messages postés
129
Date d'inscription
jeudi 30 mars 2006
Statut
Membre
Dernière intervention
2 décembre 2012

bon au dessus de la zone d'authentification j'ai rien a mettre ni au dessous elle doit etre au centre.

Le gridlayout n'est pas bon il parait pas de solution pour ce sujet.
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
Si.
Tu fais un
cadre.setLayout(new GridLayout(1,1,200,200));
Les 200 indiquant l'espace qu'il doit y avoir entre les bords, donc si tu veux tu mets plus.
Voilà je crois que c'est bon!
<hr size="2" width="100%" />C'est après des heures de codage que j'ai compris pourquoi les mecs de Java ont choisi une tasse de café comme logo!
Messages postés
129
Date d'inscription
jeudi 30 mars 2006
Statut
Membre
Dernière intervention
2 décembre 2012

j'ai bien mis mais pas de changement il est toujours en haut.
mes cheveux vont etre blanc par ce sujet
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
Bon j'ai trouvé.

import java.awt.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;

public class Main{
 
    public Main() {
        JFrame  cadre = new JFrame(" test ");
        cadre.setSize(600,600);
        cadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             
        JPanel pane_authentif = new JPanel ();
        pane_authentif.setBorder(new TitledBorder("Authentification"));
        pane_authentif.setOpaque(true);
       
        JButton bouton_connexion  =new JButton("Entrer");
        bouton_connexion .setSelected(true);
        JTextField T=new JTextField(12);
        JLabel L=new JLabel("login");
              
        pane_authentif.add(L);
        pane_authentif.add(T);
        pane_authentif.add(bouton_connexion);
  
        //cadre.setLayout(new GridLayout(1,1,200,200));
        cadre.setLayout(new FlowLayout(FlowLayout.CENTER,200,200));
        cadre.add(pane_authentif);
       
        cadre.setVisible(true);
    }
  
    public static void main(String[] args) {
        new Main();
    }
}

Après tu te l'arranges à ta sauce. Le troisième 200 dans le construteur de FlowLayout correspond à l'alignement vertical dnc modifie le comme bon te semble.
Voilà
+
<hr size="2" width="100%" />C'est après des heures de codage que j'ai compris pourquoi les mecs de Java ont choisi une tasse de café comme logo!