Positionner les composants swing avec java

[Résolu/Fermé]
Signaler
-
 kljsl -
Bonjour ;

J'ai écrit un petit programme pour faire une interface graphique en java:
import java.text.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import java.awt.BorderLayout.*;
import javax.swing.table.*;

 
public class Recherche1 extends JFrame {
 //Panel de criteres de recherche
 public JPanel panelRecherche = new JPanel();   BorderLayout());

 
//Champs texte
 public  JTextField champ1 = new JTextField(20);
 
//Boutons
 public JButton Ajouter = new JButton("Ajouter");
     
//ComboBox
 public JComboBox critere = new JComboBox();
  
// *********************** Constructeur par défaut *************************

public Recherche1() {
  
   
  this.getContentPane().add(panelRecherche);
  
  panelRecherche.add(champ1);
  panelRecherche.add(critere);
  panelRecherche.add(Ajouter);
  
  this.setTitle("Fenetre de recherche musicale");  
  
  this.setSize(500, 500);  
  
  this.setVisible(true);
  panelRecherche.setVisible(true);
  
 
  this.show();
  
}

}

Ceci permet d'afficher une fenetre contenant un champ de texte, un bouto et une combo box. J'aimerais positioner ces composants comme je le souhaite, par exemple: mettre le bouton au-dessous des deux autres. J'ai lu de la doc mais je ne trouve pas ce que je cherche, quelqu'un peut-il m'aider svp?

Merci

8 réponses

Salut Sabrina,

Si tu veux placer vraiment librement tes objets, tu peux initialiser le layout à null et placer tes composants avec la méthode setBounds (x,y,width,height)

Je ne suis pas un pro dans ce domaine donc essai de voir sur ce lien
http://java.sun.com/j2se/1.3/docs/api/java/awt/Component.html#setBounds(int,%20int,%20int,%20int)

Sinon j'ai aussi entendu dire que le GridBagLayout était assez flexible comme gestionnaire de mise en page.
Tu peux jeter un coup d'oeil la dessus :
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/GridBagLayout.html

Cordialement,

Jon301
18
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci


Pour utiliser le setBounds(x,y,w,h);
il faut que tu mettes le Layout de ton component(JPanel) à null.
setLayout(null);
Car lorsque tu crées un jpanel il y a un layout par defaut dessus(borderlayout je crois??!!).
Voila :)
merci pour ta réponse, une bonne solution !

Bonjour,

la méthode consistant à utiliser les gestionnaires de positionnement permet :
1) de positionner les composants comme on le souhaite;
2) d'éviter des comportements imprévisibles lors des redimensionnement des composants parents.

Selon les besoins, on utilise les BorderLayout, GridLayout, GridBagLayout, BoxLayout, CardLayout, FlowLayout, et le petit dernier SpringLayout.

Pour un tutoriel bien fait, c'est ici:
http://java.sun.com/docs/books/tutorial/uiswing/layout/index.html

et comme d'habitude la doc sur l'API java est votre ami:
http://java.sun.com/j2se/1.5.0/docs/api/

a+
Il y a de très bons tutoriaux sur Java à cette adresse, dont l'un traite du positionnement des composants:
http://b.kostrzewa.free.fr/java/index.html

Je vous conseille de taper les exemples fournis et de les compiler. Ca permet de mieux assimiler.
Le positionnement des composants Swing n'est guère différent de celui des composants de l'AWT (Abtract Windowing Toolkit).
c'est l'ordre dans lequel tu ajoutes qui fait que tu auras un panel au dessus de l'autre =)
Merci bcp pour ton aide.

J'ai essayé d'utiliser la méthode setBounds comme dans les exemples fournis mais ça ne marche pas. il compile mais à l'exécution, rien ne change. g inséré l'instruction suivante après les add:
champ1.setBounds(10, 10, 100, 100)

Quelqu'un peut-il m'aider svp?

Merci
Salut, j'ai le meme probleme que toi concernant les composants.

J'ai annulé le borderlayout par
getContentPane().setLayout(null)
, je crais mes différents panel et le places.

Pour finir, je crais des boutons et label, que je place dans mes panel, et je veux les replacer comme toi par la méthode
champ1.setBounds(10, 10, 100, 100)
, mais cela ne fonctionne pas.

Est ce que tu connais la solution a ce probleme?

Merci, david
N'oubliez d'ajouter votre champ au JPanel
pan.add(champ);
suivi des instructions pour la JFrame :
pack();
setVisible(true);

Bonsoir,

Il faut utiliser les layout:
BorderLayout, GridLayout, BoxLayout, GridBagLayout etc...
--> Voir la documentation

a+
Bonsoir :

s'il vous plait j'ai un problème concernant la superposition des composants : en faite j'ai deux JPanel que je veux superposer l'un en dessous de l'autre ,le premier contient une image le deuxième contient des boutons et labels qui doivent etre placées sur l'image. Pour le prmeier JPanel c'est bon,j'ai fait une image au fond et j'ai ajouté la Jpanel a ma fenetre,pour le deuxième j l'ai defini et j'ai ajouté les comosants avec setBounds puis j'ai ajouté les deux JPanels a ma fentere.Le problème est que le deuxième JPanel ,plus precisement les comosants qu'il contient boutons,labels n'apparaiisent qu'en survolant la fenetre avec ma souris ?!?!? et si je minimise la fentre tous ces composants disparaissent et ne reste que l'image ?????????

S'il vous plait aidez moi ......
Bonjour Smile,
je ne comprends pas trop ton besoin??? Tu as besoin de superposer un panel avec une image et un autre panel avec tes (labels + boutons)??? Ou bien te faut-il une fenêtre où mettre d'un côté ton image et de l'autre tes (labels + boutons)?