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

AWT/Swing Java Discussion :

Problème de positionnement de mes composants


Sujet :

AWT/Swing 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
    Mai 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 180
    Par défaut Problème de positionnement de mes composants
    Bonjour,
    Alors voilà mon problème c'est que j'arrive pas à positionner mes composants comme je le souhaite!
    voici mon code :
    code :
    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
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.GridLayout;
     
    import javax.swing.Box;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
     
    public class FenetreSaisie extends JFrame{
    	private static final Component Label1 = null;
    	private static final Component Label2 = null;
    	private static final Component Label3 = null;
    	private JTextField textField;
    	private JTextField textField2;
    	private JTextField textField3;
    	private JTextField textField4;
    	private Container pane1;
    	private JLabel label;
     
    	public FenetreSaisie(){
    		super();
     
    		build();//On initialise notre fenêtre
    	}
     
    	private void build(){
    		setTitle("Fenêtre qui demande du texte"); //On donne un titre à l'application
    		setSize(800,600); //On donne une taille à notre fenêtre
    		setLocationRelativeTo(null); //On centre la fenêtre sur l'écran
    		setResizable(true); //On permet le redimensionnement
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //On dit à l'application de se fermer lors du clic sur la croix
    		setContentPane(buildContentPane());
    	}
     
    	private JPanel buildContentPane(){
    		// Instance de JPanel
    		JPanel panel = new JPanel();
    		JPanel panel2 = new JPanel();
    		JPanel panel3 = new JPanel();
     
    		// Méthode setLayout
    		panel.setLayout(new FlowLayout());  //On définit le layout à utiliser sur le content pane
     
    		// Demander du texte à l'utilisateur
     
    		textField = new JTextField("1er champs"); // Création champs pour user1
    		textField.setColumns(8);
    		panel.add(textField);
     
    		textField2 = new JTextField("2ème champs"); // Création champs pour user2	
    		textField2.setColumns(8);
    		panel.add(textField2);
     
    		textField3 = new JTextField("3ème champs"); // Création champs pour user3
    		textField3.setColumns(8);
    		panel.add(textField3);
     
    		textField4 = new JTextField("4ème champs"); // Création champs pour user4	
    		textField4.setColumns(8);
    		panel.add(textField4);
     
    		// Afficher du texte dans la fenetre 
     
    		JLabel label = new JLabel("Zone de début");
    		panel.add(label);
     
    		JLabel label1 = new JLabel("Zone de fin");
    		panel.add(label1);
     
    		JLabel label2 = new JLabel("Valeur de début");
    		panel.add(label2);
     
    		JLabel label3 = new JLabel("Valeur de fin");
    		panel.add(label3);
     
     
    		// Afficher boutons 
     
    		JButton bouton1 = new JButton("PARCOURIR"); // Je créer bouton
    		panel.add(bouton1);
     
    		JButton bouton2 = new JButton("OK"); // Je créer bouton2
    		panel.add(bouton2);
     
    		JButton bouton3 = new JButton("ANNULER"); // Je créer bouton3
    		panel.add(bouton3);
     
    		return panel;
     
    	}
     
     
    	public JTextField getTextField(){
    		return textField;
    	}
     
    	public JLabel getLabel(){
    		return label;
    	}
     
     
     
    	public static void main(String[] args) {
    		//On crée une nouvelle instance de notre FenetreTexte
    		FenetreSaisie fenetre = new FenetreSaisie();
    		fenetre.setVisible(true);//On la rend visible
    	}
    }
    En output j'aimerai bien avoir ce résultat :

    Nom : fenetre.png
Affichages : 981
Taille : 10,0 Ko

    => J'ai beau essayer la méthode des Layout mais je n'y arrive pas...ensuite je suis passer à la méthode cardinal mais lorsque je mets le layout de mon panel à null, il y a des composants qui disparaissent ... sa me laisse perplexe!!

    Help please

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu utilises un FlowLayout, qui enfile les composants les uns derrières les autres, en passant à la ligne lorsque la ligne de composant dépasse la preferredWidth du container. Le FlowLayout n'est vraiment pas adapté à la présentation de ton formulaire.

    Premièrement, si tu ne veux pas trop de prendre là tête avec ces histoires, tu peux utiliser un plugin dans Eclipse (WindowBuilder) ou la palette dans NetBeans (ou je ne sais quoi dans IntellijIdea). Personnellement, je ne suis pas fan de ce genre d'outils, en partie parce qu'ils ne permettent pas d'apprendre, mais ils ont l'avantage d'être visuels donc de pas mal aider les débutants.

    Celà dit, sur le principe, lorsqu'on fait une interface, il faut connaitre les différents LayoutManager de base, et leur comportement : ensuite, il faut découper son interface en zones (chaque zone correspondant à un JPanel avec son propre LayoutManager) pour utiliser les différents composants et LayoutManager afin d'arriver au résultat. Parce qu'il y a 3 grandes catégories de LayoutManager de base :

    • Les grilles : GridLayout, GridBagLayout, mais aussi BoxLayout, qui sont en quelques sortent des grilles à 1 ligne ou 1 colonne, et le RowLayout
      Avec 2 spéciaux :
      • le SpringLayout, qui met en place des liens entre composant (un composant est à droite d'un autre, ou en dessous d'un autre...)
      • le GroupLayout, qui permet en plus d'avoir des hiérarchies


      Ces 2 derniers étant assez compliqués à mettre en œuvre pour un débutant
    • BorderLayout, qui est un Layout qui permet de définir un layout type dialogue : un zone au centre pour le formulaire, une banière en haut, une zone au sud, pour des boutons par exemple, et des zones latérales
    • Les autres, un peu hors-catégorie :
      • FlowLayout : chaque nouveau composant est relatif au précédent (on utilise ça par exemple pour une barre de boutons)
      • CardLayout : un seul composant visible à la fois, parmi différents composants
      • OverlayLayout : un composant au dessus d'un autre, visible aussi




    Le GridBagLayout devrait convenir à ton formulaire mais il n'est pas évident à utiliser pour un débutant.
    A noter que pour les formulaires, il existe une bibliothèque appelée JGoodies avec un layout manager, le FormLayout qui simplifie le layouting de Formulaire à champ.

    Pour voir ce que donne chaque LayoutManager :
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 180
    Par défaut
    Salut Joel

    Tu utilises un FlowLayout, qui enfile les composants les uns derrières les autres, en passant à la ligne lorsque la ligne de composant dépasse la preferredWidth du container. Le FlowLayout n'est vraiment pas adapté à la présentation de ton formulaire.
    Exactement, tu me la fait remarqué...

    Premièrement, si tu ne veux pas trop de prendre là tête avec ces histoires, tu peux utiliser un plugin dans Eclipse (WindowBuilder) ou la palette dans NetBeans (ou je ne sais quoi dans IntellijIdea). Personnellement, je ne suis pas fan de ce genre d'outils, en partie parce qu'ils ne permettent pas d'apprendre, mais ils ont l'avantage d'être visuels donc de pas mal aider les débutants.
    => Comment utilise t-on le windowBuilder sur eclipse stp
    j'ai fais window => preference => windowBuilder => Swing => Layout => GridBagLayout mais ensuite je ne sais pas quoi faire.
    Celà dit, sur le principe, lorsqu'on fait une interface, il faut connaitre les différents LayoutManager de base, et leur comportement : ensuite, il faut découper son interface en zones (chaque zone correspondant à un JPanel avec son propre LayoutManager) pour utiliser les différents composants et LayoutManager afin d'arriver au résultat. Parce qu'il y a 3 grandes catégories de LayoutManager de base :
    => Je créer trois panels :
    1 panel pour les boutons, le 2eme pour les textFields et le 3eme pour les labels nan ?

    Une dernière question comment appelle t-on le rectangle en haut à gauche? stp , en faite je vais cliquer sur parcourir et ensuite un fichier choisi sera stocké sur le rectangle

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 180
    Par défaut
    Comment utilise t-on le windowBuilder sur eclipse stp
    j'ai fais window => preference => windowBuilder => Swing => Layout => GridBagLayout mais ensuite je ne sais pas quoi faire.
    J'ai trouver, en faite on clique droit sur notre classe ensuite => open with => WindowBuilder Editor.

    Le plus dur c'est la suite..

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 180
    Par défaut
    Re
    J'ai trouver ( ENFIN ) la réponse j'ai suivi ce tuto qui est très interressant pour tous ceux qui savent pas utilisé WindowBuilder =>
    http://isn.mgz.free.fr/fichiers_pdf/TDfondEcran.pdf

    Du coup mes seules questions qui me reste sont :
    1/ comment s'appelle le composant que je dois mettre sur la même ligne que parcourir ? en effet lorsque je clique sur parcourir je dois pouvoir avoir une autre page qui s'ouvre et qui me propose de choisir un fichier.
    2/ Quels action mettre à mes 3 boutons?

    thinks

    Nom : interface2.png
Affichages : 798
Taille : 1,57 Mo

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Le composant à gauche du bouton parcourir est simplement un JTextField.
    Quant au bouton, il va ouvrir un JFileChooser pour choisir le nom du fichier, et que tu n'auras plus qu'à mettre toi même dans le champ texte.

    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
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.io.File;
    import java.io.FileFilter;
     
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JPopupMenu;
    import javax.swing.JTextField;
     
     
    public class ExempleBrowseFile extends JPanel {
     
    	private JTextField textField;
    	private JButton button;
     
     
    	public ExempleBrowseFile(boolean fieldLocked) {
    		super(new GridBagLayout());
    		textField = new JTextField();
    		add(textField, new GridBagConstraints(0, 0, 1, 1, 1, 0, GridBagConstraints.BASELINE_TRAILING, GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 2), 0, 0));
    		button = new JButton("Parcourir");
    		add(button, new GridBagConstraints(1, 0, 1, 1, 0, 0, GridBagConstraints.BASELINE_LEADING, GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 0, 0));
     
    		button.addActionListener(new ActionListener() {
     
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				browseFile();
    			}
     
     
    		});
     
    		if ( fieldLocked ) {
    			textField.setEditable(false); 
    		}
     
    	}
     
    	private void browseFile() {
    		JFileChooser fileChooser = new JFileChooser();
    		fileChooser.setDialogTitle("Choisir le fichier...");
    		fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    		fileChooser.setMultiSelectionEnabled(false);
    		if ( !textField.getText().isEmpty() ) {
    			fileChooser.setSelectedFile(new File(textField.getText()));
    		}
    		// il y a plein d'autres méthodes pour customiser le composant (filtre sur les fichiers par exemple) : voir doc.
    		if ( fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION ) { 
    			textField.setText(  fileChooser.getSelectedFile().getAbsolutePath().toString() );
    		}
    	}
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Démo");
     
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		frame.getContentPane().add( new ExempleBrowseFile(false) );
     
    		frame.setSize(400,100);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    }
    Pour les autres boutons :

    • Ok : va lire les valeurs dans les différents champs et lance la méthode de traitement (pour lire : JTextField.getText()).
    • Annuler : ça dépend de ce que tu veux faire (si c'est juste quitter l'application, ou revenir à un écran d'accueil)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Problème positionnement de trois composants
    Par dark0502 dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 29/06/2011, 09h24
  2. Réponses: 6
    Dernier message: 19/02/2008, 19h48
  3. Problème de placement de mes composants et layout
    Par mnemonic78 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 28/10/2007, 16h39
  4. Problème de positionnement avec mes DIV
    Par Rifton007 dans le forum Mise en page CSS
    Réponses: 11
    Dernier message: 23/01/2007, 10h48
  5. Réponses: 5
    Dernier message: 13/06/2006, 15h14

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