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

Agents de placement/Fenêtres Java Discussion :

Utiliser les layouts pour bien placer les composants Swing ?


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Par défaut Utiliser les layouts pour bien placer les composants Swing ?
    Bonjour

    Je suis entrain d'apprendre la manipulation des layouts, pour cela j'ai voulu simuler l'interface suivante (ci-jointe) sans utiliser l'option "Drag and Drop", mais j'arrive pas à préciser les layouts adéquats à utiliser pour bien réaliser cette interface.

    Vos idées m’intéresse beaucoup.




    Merci d'avance.
    Images attachées Images attachées  

  2. #2
    Membre chevronné
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Par défaut
    Bonsoir
    Pour ton interface, une solution possible serait d'utiliser ce jeu d'instructions pour positionner tes composants
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    JTextField text= new JTextField();
    text.setBounds(80, 10, 50, 50);
    panel.setLayout(null);
    panel.add(text);

    ligne 2: permet de positionner ton JTextField aux coordonnées (80, 10), sa dimension est de (width=50, height=50)
    ligne 3: mettre à null le layout du panel
    ligne 4: ajouter ton JTextField à ton panel

  3. #3
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Par défaut
    Bonjour,
    Je me lance avec une proposition d'utilisation des Layout. J'attends les critiques

    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
     
    import javax.swing.*;
    import java.awt.*;
     
    public class TestLayout extends JFrame {
     
    	Font font = new Font("Monospaced",Font.PLAIN,12);//changement de font si besoin
     
    	public TestLayout() {
     
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setLayout(new FlowLayout(FlowLayout.CENTER,20,20)); //pour inserer un panel au centre avec 20 pixels de margin H et V
     
     
    		JPanel panel = new JPanel(new BorderLayout(10,20)); //panel principal à inserer 10 pour espacer entre WEST et CENTER, 20 pour espacer entre CENTER et SOUTH
    		panel.setPreferredSize(new Dimension(340,150));// taille preferee du panel principal
    		add(panel);
     
     
     
    		/****creation des éléments****/
     
    		JLabel labelPrenom = new JLabel("Prenom");
    		labelPrenom.setFont(font);
     
    		JLabel labelNom = new JLabel("Nom");
    		labelNom.setFont(font);
     
    		JLabel labelSexe = new JLabel("Sexe");
    		labelSexe.setFont(font);
     
    		JLabel labelDate = new JLabel("Date");
    		labelDate.setFont(font);
     
    		JPanel panelTextPrenom = new JPanel(new FlowLayout(FlowLayout.LEFT,0,0));//on mets textPrenom dans un JPanel avec LEFT pour coller à gauche et preferredSize fonctionne
    		JTextField textPrenom = new JTextField();
    		textPrenom.setPreferredSize(new Dimension(250,20));//taille de textPrenom
    		textPrenom.setFont(font);
    		panelTextPrenom.add(textPrenom);
     
    		JPanel panelTextNom = new JPanel(new FlowLayout(FlowLayout.LEFT,0,0));//pareil qu'au dessus
    		JTextField textNom = new JTextField();
    		textNom.setPreferredSize(new Dimension(200,20));
    		textNom.setFont(font);
    		panelTextNom.add(textNom);
     
    		JRadioButton radioMasculin = new JRadioButton("Masculin");
    		radioMasculin.setFont(font);
     
    		JRadioButton radioFeminin = new JRadioButton("Feminin");
    		radioFeminin.setFont(font);
     
    		JPanel panelRadio = new JPanel(new FlowLayout(FlowLayout.LEFT,0,0));//on mets les radio dans un JPanel avec LEFT pour coller à gauche
    		panelRadio.add(radioMasculin);
    		panelRadio.add(radioFeminin);
     
    		JComboBox comboJour = new JComboBox();
    		comboJour.setFont(font);
    		for(int i=1;i<32;i++)
    			comboJour.addItem(i);
     
    		JComboBox comboMois = new JComboBox();
    		comboMois.setFont(font);
    		comboMois.addItem("Janvier");
    		comboMois.addItem("Fevrier");
    		comboMois.addItem("Mars");
    		comboMois.addItem("Avril");
    		comboMois.addItem("Mai");
    		comboMois.addItem("Juin");
    		comboMois.addItem("Juillet");
    		comboMois.addItem("Aout");
    		comboMois.addItem("Septembre");
    		comboMois.addItem("Octobre");
    		comboMois.addItem("Novembre");
    		comboMois.addItem("Decembre");
     
    		JComboBox comboAnnee = new JComboBox();
    		comboAnnee.setFont(font);
    		for(int i=1970;i<2014;i++)
    			comboAnnee.addItem(i);
     
    		JPanel panelCombo = new JPanel(new FlowLayout(FlowLayout.LEFT,0,0));//on mets les combo dans un JPanel avec LEFT pour coller à gauche
    		panelCombo.add(comboJour);
    		panelCombo.add(comboMois);
    		panelCombo.add(comboAnnee);
     
    		/****fin de la création des éléments****/
     
     
    		JPanel panelWest = new JPanel(new GridLayout(4,1));//panelWest à l'ouest du borderlayout. c'est une grille d'une colonne avec 4 lignes pour les labels
    		panelWest.add(labelPrenom);
    		panelWest.add(labelNom);
    		panelWest.add(labelSexe);
    		panelWest.add(labelDate);
    		panel.add(panelWest,BorderLayout.WEST);//ajout du panelWest au panel principal
     
     
     
    		JPanel panelCentre = new JPanel(new GridLayout(4,1));//panelCentre au centre du borderlayout. c'est une grille d'une colonne avec 4 lignes
    		panelCentre.add(panelTextPrenom);
    		panelCentre.add(panelTextNom);
    		panelCentre.add(panelRadio);
    		panelCentre.add(panelCombo);
    		panel.add(panelCentre,BorderLayout.CENTER);//ajout du panelCentre au panel principal
     
    		JPanel panelSouth = new JPanel(new FlowLayout(FlowLayout.CENTER,60,0));//panel sud pour les 2 boutons, 60 pixels entre chaque
    		JButton boutonEnregistrer = new JButton("Enregistrer");
    		JButton boutonAnnuler = new JButton("Annuler");
    		panelSouth.add(boutonEnregistrer);
    		panelSouth.add(boutonAnnuler);
    		panel.add(panelSouth,BorderLayout.SOUTH);//ajout du panelSouth au panel principal
     
    		pack();//java propose la meilleure taille en fonction des elements
    		setVisible(true);
    	}
     
     
     
     
    	public static void main(String[] args) {
    		TestLayout t = new TestLayout();
    	}
    }

  4. #4
    Membre chevronné
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Par défaut
    ludomacho, je n'crois pas qu'il y'aura de critiques mais plutot un grand merci de sa part

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Par défaut
    @ludomacho
    Grand merci à vous, c'est exactement ce que je veux.

    Sinon, pour la méthode de setBounds :
    ça marche bien, si je place les composantes dans le ContentPane directement .. mais ça marche pas lorsque je mets un JPanel au-dessus de ContentPane et je place les composantes sur le JPanel. Exemple :

    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
    import java.awt.BorderLayout;
    import java.awt.Container;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
     
    public class Test extends JFrame {
     
        public Test() {
            setSize(400, 400);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            Container c = this.getContentPane();
            c.setLayout(new BorderLayout());
            JPanel pan = new JPanel(null);
            JTextField test = new JTextField("C'est juste un test ..");
            pan.add(test);
            test.setBounds(30, 50, 100, 30);
            c.add(pan, BorderLayout.NORTH);
        }
     
        public static void main(String args[]) {
            new Test().setVisible(true);
        }
    }
    Ou est le problème ,à votre avis ?

  6. #6
    Membre chevronné
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Par défaut
    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
    	public class Test extends JFrame {
     
    	    public Test() {
    	        setSize(400, 400);
    	        setDefaultCloseOperation(EXIT_ON_CLOSE);
     
    	        JPanel pan = new JPanel();
    	        pan.setLayout(null);
     
    	        JTextField test = new JTextField("C'est juste un test ..");
    	        test.setBounds(30, 50, 100, 30);
     
    	        pan.add(test);
     
    	        this.getContentPane().add(pan);
                    // même avec this.setContentPane(pan); ça marche
    	    }
     
    	    public static void main(String args[]) {
    	        new Test().setVisible(true);
    	    }
    	}
    Voila comme ça, ça marche

    Tu dois annuler le Layout du container dans lequel tu vas entreposer tes composant, à savoir "pan"

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

Discussions similaires

  1. [Java 6] où placer les .jar pour imports?
    Par Jean_Benoit dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 30/01/2009, 11h07
  2. Réponses: 4
    Dernier message: 28/12/2008, 02h07
  3. Les cléfs pour bien débuter le webmastering
    Par abakobo dans le forum Débuter
    Réponses: 1
    Dernier message: 13/12/2007, 17h43
  4. Conseils pour bien écrire les classes ado.net
    Par azerty53 dans le forum VB.NET
    Réponses: 3
    Dernier message: 15/05/2007, 18h24

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