Probleme avec setLocation() !!!!

thevirgin Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   -  
 vanyle -
Bonjour,
j'ai un probleme avec la méthode setLocation(arg0,arg1)
voila, quand je fais par exemple : bouton.setLocation(100,100); ça ne marche pas !!! je ne sais pas ou réside le probleme ???!!!
merci

3 réponses

thevirgin Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   3
 
salut,
le probleme ne se pose pas seulement pour le bouton, mais aussi pour toutes les Jcheckbox et les Jcombox, qd je compile ce code, j ai tous ces objets alignés mm si j utilise setLocation

voici le code :


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.TextField;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class Fene extends JFrame {

private JPanel container = new JPanel();
private JCheckBox check1 = new JCheckBox(" Date (donner un intervalle) ");
private JCheckBox check2 = new JCheckBox(" Type ");
private JCheckBox check3 = new JCheckBox(" Matériel ");
private JCheckBox check4 = new JCheckBox(" Objet ");
private JCheckBox check5 = new JCheckBox(" Nom ");
private JCheckBox check6 = new JCheckBox(" Bureau ");
private JCheckBox check7 = new JCheckBox(" Technicien ");
private JCheckBox check8 = new JCheckBox(" Etat ");
private JComboBox combo1 = new JComboBox();
private JComboBox combo2 = new JComboBox();
private JComboBox combo3 = new JComboBox();
private JComboBox combo4 = new JComboBox();
private JComboBox combo5 = new JComboBox();
private JComboBox combo6 = new JComboBox();
private JComboBox combo7 = new JComboBox();
private JComboBox combo8 = new JComboBox();
private TextField txtField1=new TextField("jj/mm/aaaa");
private TextField txtField2=new TextField("jj/mm/aaaa");
private TextField txtField3=new TextField();

private JButton bouton = new JButton("recherche");

public Fene(){

this.setTitle("recherche");
this.setSize(400, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);

//On définit le layout à utiliser sur le contentPane
this.setLayout(new BorderLayout());
//On ajoute le bouton au contentPane de la JFrame
//Au SUD
this.getContentPane().add(new JButton("lancer la recherche"), BorderLayout.SOUTH);


container.setBackground(Color.white);
container.setLayout(new BorderLayout());

combo1.setPreferredSize(new Dimension(100,20));
combo2.setPreferredSize(new Dimension(100,20));
combo3.setPreferredSize(new Dimension(100,20));
combo4.setPreferredSize(new Dimension(100,20));
combo5.setPreferredSize(new Dimension(100,20));
combo6.setPreferredSize(new Dimension(100,20));
combo7.setPreferredSize(new Dimension(100,20));
combo8.setPreferredSize(new Dimension(100,20));
txtField1.setPreferredSize(new Dimension (100,20));
txtField2.setPreferredSize(new Dimension (100,20));
txtField3.setPreferredSize(new Dimension (100,20));

JPanel top = new JPanel();



top.add(check1);
top.add(txtField1);
top.add(txtField2);
top.add(check2);
top.add(combo2);
top.add(check3);
top.add(combo3);
top.add(check4);
top.add(combo4);
top.add(check5);
top.add(combo5);
top.add(check6);
top.add(combo6);
top.add(check7);
top.add(combo7);
top.add(check8);
top.add(combo8);
top.add(bouton);
bouton.setLocation(200,200);


container.add(top, BorderLayout.CENTER);
this.setContentPane(container);
this.setVisible(true);
}

public static void main(String[] args){
Fene fen= new Fene();
}
}
2
sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   723
 
Euh... normal d'avoir cela, car ton top n'a pas de layout associé
JPanel top = new JPanel(); // <== sans préciser le layout, un FlowLayout est choisi par défaut au runtime

Tu peux très bien dire:
JPanel top = new JPanel();
top.setLayout(null);

Et par la suite tu pourras positionner tes composants à l'interieur du composant top avec des setLocation(). Mais ceci n'est pas recommandé (du tout!) Les raisons:
- quid de l'affichage sur un écran avec une résolution différente
- quid du resize de l'application (normalement, si on modifie les limites de la fenêtre, son contenu devrait rester joli, ce qui n'est pas le cas si on fixe les positions des composants)

Il n'est pas recommandé non plus (sauf en de très rares cas) d'utiliser les méthodes setPreferedSize() / setMinimumSize() / setMaximumSize() pour des raisons similaires.

La solution: utiliser les layouts mis à ta disposition par Swing. D'habitude (sans que ce soit nullement une recette!), pour des fenêtres simples, on utilise le container avec BorderLayout (le centre occupera le max de place possible) et on place en bas (south) un JPanel avec les boutons (et avec un layout de type FlowLayout) et au centre un JPanel avec un GridBagLayout. Par la suite, on place les composants sur le panel central en jouant avec les contraintes liées à ce type de layout.

Fais un SOS si tu ne t'en sors toujours pas :)
0
GL_INSAT > sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention  
 
après avoir fait
JPanel pan = new JPanel();

il faut faire
pan.setLocation(null);

et non pas faire
instance_de_la_fenetre.setLocation(null);
0
vanyle
 
quand je positionne des elements avec des coordonnées je conseille de calculer des coefficients (getWidth()/500 et getHeight()/500) pour ne pas avoir de problème de redimmensionement
0
sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   723
 
Salut,

Poste un bout de code pour identifier le problème... Dans quel type de container est placé ton JButton? Il faut, je pense, qu'il soit dans un panel "absolute" (i.e., avec un panel.setLayout(null);) pour que ton setLocation() fonctionne. Sinon, le panel et son layout savent gérer la position du bouton sans avoir à préciser la position de ce dernier.

++
0
thevirgin Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   3
 
merci pour ta reponse :-)
0