Probleme de JPanel au centre

alias100 Messages postés 129 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 2 décembre 2012 - 7 juin 2007 à 08:17
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 - 11 juin 2007 à 11:58
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

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
7 juin 2007 à 09:13
Salut,

déjà pour commencer si tu utilises les Layout oublie les méthodes setLocation et setSize (ref : 1), limite tu peux utiliser la méthode setPreferredSize, ensuite par défaut si tu ne change pas le Layout d'un JPanel celui-ci prend la valeur FlowLayout (à l'exception près du ContentPane)

1 :
pane_authentif.setSize(200, 200);
pane_authentif.setLocation(200, 200);

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

OoWORAoO
0
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
7 juin 2007 à 09:17
Moi personnellement, je trouve qu'il y a un panel en trop.
J'aurais fait comme ça :

    public Main()
    {
        cadre = new JFrame(" test ");
        cadre.setSize(600,400);
        cadre.setLayout(new FlowLayout());
          
        pane_authentif = new JPanel ();
        pane_authentif.setPreferredSize(new Dimension(200,200));
        pane_authentif.setBorder(new TitledBorder("Authentification"));
      
        bouton_connexion  =new JButton("Entrer");
        bouton_connexion .setSelected(true);
      
        pane_authentif.add(bouton_connexion);
      
        cadre.getContentPane().add(pane_authentif);
        cadre.setVisible(true);
    }
<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!
0
alias100 Messages postés 129 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 2 décembre 2012
7 juin 2007 à 15:05
merci j'ai dvoraky,
j'ai change dans mon code, j'ai enlever .setSize et .setLocation et j'ai met le     pane_authentif.setPreferredSize(new Dimension(100,100));
   
Mais toujours ce panel s'affiche sur tous la taille de la frame pas rellement au centre!!!
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
7 juin 2007 à 15:58
Salut,
tu fais
pane = new JPanel (new BorderLayout());
....
pane.add(pane_authentif,BorderLayout.CENTER);

donc je trouve que le comportement de ton code est logique.... maintenant si tu ne le veux pas étiré sur toute la fenetre change de layout.....

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

OoWORAoO
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
7 juin 2007 à 16:05
Moi ça marche sans problème. Bien centré, en ne prenant que la place indiquée.
Je dois avouer que je ne suis pas trop BorderLayout, aors dès que je peux éviter, ben je l'évite...
Voilà tu es donc arrivé à tes fins.
Maintenant rajoutes moi une joli action de connexion à ce bouton "Entrer"
+
<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!
0
alias100 Messages postés 129 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 2 décembre 2012
7 juin 2007 à 16:07
 Mon code contient:
 pane = new JPanel (new BorderLayout());

 pane.add(pane_authentif,BorderLayout.CENTER);
Mais il ne s'affiche pas au centre c'est sa le probleme,..


vous avez dit "maintenant si tu ne le veux pas étiré sur toute la fenetre change de layout....."

Quel layout?? j'utilise BoxLayout,FlowLayout????
0
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
7 juin 2007 à 16:12
Regarde mon code... J'ai viré pane et franchement JE trouve que c'est mieux. Maintenant, c'est un JE donc voilou à prendre avec des pincettes.
+
<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!
0
alias100 Messages postés 129 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 2 décembre 2012
7 juin 2007 à 16:16
Le code  de dvoraky est juste mais j'ai voulu utiliser deux panel:
 Le premier contient une image et dans son centre je met le panel authentif.
Je veux qu'il s'affiche comme le resultat de l'execution de code que vous avez mis mais comment je peux mettre l'image en arrirere plan je dois avoir un panel!!!n'est ce pas??
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
7 juin 2007 à 16:31
Salut,

nan pas obligé tu peux utiliser un JLabel (exemple avec le code de dvoraky)

import java.awt.Dimension;
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.border.TitledBorder;

public class Main {
    public Main() {
        JFrame  cadre = new JFrame(" test ");
        cadre.setSize(600,400);
        cadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        <strike> //cadre.setLayout(new FlowLayout()); </strike>
         
        JPanel pane_authentif = new JPanel ();
        pane_authentif.setPreferredSize(new Dimension(200,200));
        pane_authentif.setBorder(new TitledBorder("Authentification"));
        pane_authentif.setOpaque(false);//important sinon tu ne verras pas l'image
     
        JButton bouton_connexion  =new JButton("Entrer");
        bouton_connexion .setSelected(true);
        pane_authentif.add(bouton_connexion);
       
        JLabel contentPane = new JLabel(new ImageIcon("logo.png"));
        contentPane.setLayout(new FlowLayout());
        contentPane.add(pane_authentif);
       
        cadre.setContentPane(contentPane);
        cadre.setVisible(true);
    }
   
    public static void main(String[] args) {
        new Main();
    }
}

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

OoWORAoO
0
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
7 juin 2007 à 16:31
Ok je comprend mieux.
Ben en fait c'est pas plus compliqué... Ton "pane" au lieu de le mettre en BorderLayout, tu le mets en FlowLayout et ... tada!!! c'est au milieu.
Voilou
+
<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!
0
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
7 juin 2007 à 16:38
Suis les conseils de Twinuts et oublie le mien là
Tu vois, alias100, j'aurais moi aussi appris avec ton post! Je ne savais pas qu'on pouvait faire ça avec un JLabel.
Encore une fois merci Twinuts
+
<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!
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
7 juin 2007 à 16:49
Salut,

ba de rien :) et pour info tu peux meme mettre un bouton dans un bouton.....

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test extends JFrame {

    public Test() {
       
        setSize(300, 300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
       
        JPanel p = (JPanel)getContentPane();
       
        JButton bt1 = new JButton("Bouton 1");
        JButton bt2 = new JButton("Bouton 2");
       
        bt1.add(bt2);
       
        p.add(bt1);
        setVisible(true);
    }
   
    public static void main(String[] args) {
        new Test();
    }
}

je te laisse imaginer les ihm bien tordu que tu peux faire en java ^^

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

OoWORAoO
0
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
7 juin 2007 à 16:55
Ah ouais! Alias100 pour pane_authentif au lieu de faire avec un JPanel, je le ferais en JButton pour voir!
^^
Tiens je vais voir ce que ca donne...euh... lol?
Quand tu dis IHM tordue, c'est même plus que tordu
<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!
0
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
7 juin 2007 à 17:18
public class Main extends JFrame
{
    private static int nbBouton = 25;
    public Main()
    {
        this.setBounds(50, 50, 600, 400);
        this.setTitle("La pyramide des boutons");
        this.setResizable(false);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
       
        JButton [] boutons = new JButton[nbBouton];
   
        for (int i = 0; i < nbBouton; i++)
        {
            boutons[i] = new JButton();
        }
       
        for (int i = 0; i < nbBouton-1; i++)
        {
            boutons[i].add(boutons[i+1]);
        }
       
        this.getContentPane().add(boutons[0]);
        this.setVisible(true);
        this.pack();
    }
  
    public static void main(String[] args) {
        new Main();
    }
}

... désolé ...
<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!
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
7 juin 2007 à 17:20
lol

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

OoWORAoO
0
alias100 Messages postés 129 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 2 décembre 2012
10 juin 2007 à 07:53
bonjour twinuts, merci pour votre aide, j'ai pris votre code et j'ai creer mon propre panel:

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

public class test {
    public test() {
        JFrame  cadre = new JFrame(" test ");
        cadre.setSize(600,400);
        cadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //cadre.setLayout(new FlowLayout());
        
        JPanel pane_authentif = new JPanel ();
        pane_authentif.setPreferredSize(new Dimension(200,200));
        pane_authentif.setBorder(new TitledBorder("Authentification"));
        pane_authentif.setOpaque(true);//important sinon tu ne verras pas l'image
       
        JButton bouton_connexion  =new JButton("Entrer");
        JTextField T=new JTextField(12);
        JLabel L=new JLabel("login");
        bouton_connexion .setSelected(true);
         pane_authentif.add(L);
        pane_authentif.add(T);
       
        pane_authentif.add(bouton_connexion);
  
        pane_authentif.setLocation(400,600);
        JLabel contentPane = new JLabel(new ImageIcon("logo.jpg"));
        contentPane.setLayout(new FlowLayout());
        contentPane.add(pane_authentif);
      
        cadre.setContentPane(contentPane);
        cadre.setVisible(true);
    }
  
    public static void main(String[] args) {
        new test();
    }
}

Le probleme que le paneau s'affiche en haut pas au centre de frame j'ai utiliser pane_authentif.setLocation et pane_authentif..setBounds mais il ne change pas de place!!!
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
10 juin 2007 à 13:37
Salut,

joue avec les Layout

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

OoWORAoO
0
alias100 Messages postés 129 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 2 décembre 2012
10 juin 2007 à 17:02
ici le contentPane est un label dans le quel j'ai ajoute un panel contentPane.add(pane_authentif);
Mais dans le label il n'y pas de layout,
Je crois qu'il se trouve seulement dans les panels(layouts).
Alors comment jouer avec les Layout c'est vraiment bizarre
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
10 juin 2007 à 18:12
salut,

si tu as la méthode setLayout dans le jlabel....

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

OoWORAoO
0
alias100 Messages postés 129 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 2 décembre 2012
10 juin 2007 à 23:00
voici mon nouveau code:



import java.awt.*;
import javax.swing.*;
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"));
        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);
   
 
        JLabel contentPane = new JLabel(new ImageIcon("logo.jpg"));
       
        
        contentPane.setLayout(new BorderLayout());
        contentPane.add(pane_authentif,BorderLayout.CENTER);
       
        cadre.setContentPane(contentPane);
     
        cadre.setVisible(true);
    }
   
    public static void main(String[] args) {
        new test();
    }
}

mais encore le panel n'est pas au centre.Merci!!
0
Rejoignez-nous