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

 Java Discussion :

Avoir une fenêtre avec des widgets espacés les uns des autres


Sujet :

Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 21
    Points : 14
    Points
    14
    Par défaut Avoir une fenêtre avec des widgets espacés les uns des autres
    Bonjour,

    Je suis en train de créer une fenêtre qui comprend 3 JTextField associés chacun à un bouton :
    - 1ère ligne : 1 JTextField, 1 JButton
    - 2ème ligne : 1 JTextField, 1 JButton
    - 3ème ligne : 1 JTextField, 1 JButton

    Puis tout en dessous, un bouton qui exécute tout mon programme.
    Voilà une image qui représente en gros ce que j'aimerai obtenir :

    Nom : MalfunctionDessin.jpg
Affichages : 130
Taille : 26,8 Ko

    J'essaie tant bien que mal de réaliser cela avec les layouts tel que le GridLayout(), et le BorderLayout(), mais mes widgets sont trop gros sur ma fenêtre et prennent tout l'espace disponible, et je ne vois pas comment faire autrement...

    Voici mon 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
     
    public class MalfunctionIHM extends JFrame {
     
        JPanel pan1;
        JPanel pan2;
        JTextField pdfFile;
        JTextField textFile;
        JTextField saveFile;
        JButton buttonOpenPdfFile;
        JButton buttonOpenTextFile;
        JButton buttonSaveFile;
        JButton buttonExecuteMalfunction;
     
        public MalfunctionIHM() {
     
            this.setTitle("Malfunction");
            this.setSize(480, 180);
            this.setLocationRelativeTo(null);
            this.setResizable(true);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            pan1 = new JPanel(new GridLayout(3,2,10,10));
            pdfFile = new JTextField();
            pdfFile.setEditable(false);
            pdfFile.setText("Chercher votre fichier pdf");
            buttonOpenPdfFile = new JButton();
            textFile = new JTextField();
            textFile.setEditable(false);
            textFile.setText("Chercher votre fichier txt");
            buttonOpenTextFile = new JButton();
            saveFile = new JTextField();
            saveFile.setEditable(false);
            saveFile.setText("Enregistrer sous");
            buttonSaveFile = new JButton();
     
            pan1.add(pdfFile);
            pan1.add(buttonOpenPdfFile);
            pan1.add(textFile);
            pan1.add(buttonOpenTextFile);
            pan1.add(saveFile);
            pan1.add(buttonSaveFile);
     
            pan2 = new JPanel(new BorderLayout());
     
     
            buttonExecuteMalfunction = new JButton("Executer");
            pan2.add(buttonExecuteMalfunction, BorderLayout.EAST);
            this.getContentPane().add(pan1, BorderLayout.CENTER);
            this.getContentPane().add(pan2, BorderLayout.SOUTH);
     
     
            this.setVisible(true);
     
        }
    }

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Pour gérer l'espacement autour d'un composant, utilise une bordure (de type empty).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /**....**/
    pan1.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
    /**....**/
    pan2.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
    /**....**/
    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 à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup c'est exactement ce que je cherchais ! Parcontre sais-tu comment faire pour que mes boutons associés aux JTextField soient plus petits (des petits carrés) tout en faisant en sorte que mes JTextField restent assez grand en longueur, comme sur l'image en fait

  4. #4
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    On ne peut pas avec un GridLayout : toutes les colonnes ont la même largeur, toutes les lignes ont la même hauteur.

    Une solution serait d'utiliser un GridBagLayout, mais il faut aussi mettre un texte "minimal" dans le bouton (une espace par exemple), sinon le bouton sera vraiment rikiki.

    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
    public MalfunctionIHM() {
     
            this.setTitle("Malfunction");
            this.setSize(480, 180);
            this.setLocationRelativeTo(null);
            this.setResizable(true);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            pan1 = new JPanel(new GridBagLayout());
            Insets insets = new Insets(5, 5, 5, 5);
            pdfFile = new JTextField();
            pdfFile.setEditable(false);
            pdfFile.setText("Chercher votre fichier pdf");
            buttonOpenPdfFile = new JButton(" ");
            textFile = new JTextField();
            textFile.setEditable(false);
            textFile.setText("Chercher votre fichier txt");
            buttonOpenTextFile = new JButton(" ");
            saveFile = new JTextField();
            saveFile.setEditable(false);
            saveFile.setText("Enregistrer sous");
            buttonSaveFile = new JButton(" ");
     
            GridBagConstraints gbcTextField = new GridBagConstraints(0,GridBagConstraints.RELATIVE,1,1,1,1,GridBagConstraints.CENTER,GridBagConstraints.BOTH,insets,0,0);
            GridBagConstraints gbcButton = new GridBagConstraints(1,GridBagConstraints.RELATIVE,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.NONE,insets,0,0);
            pan1.add(pdfFile,gbcTextField);
            pan1.add(buttonOpenPdfFile,gbcButton);
            pan1.add(textFile,gbcTextField);
            pan1.add(buttonOpenTextFile,gbcButton);
            pan1.add(saveFile,gbcTextField);
            pan1.add(buttonSaveFile,gbcButton);
     
            GridBagConstraints gbcExec = new GridBagConstraints(2,3,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.NONE,insets,0,0);
            buttonExecuteMalfunction = new JButton("Executer");
            pan1.add(buttonExecuteMalfunction,gbcExec);
            pan1.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
     
            this.getContentPane().add(pan1);
     
     
            this.setVisible(true);
     
        }
    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.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Merci ça marche super bien
    Juste une dernière petite chose, aurais-tu un site qui explique ce GridBagLayout de la façon dont tu la fais ? Parce que j'ai été sur un autre site pour essayer de comprendre, mais j'ai pas vu utiliser le GridBagConstraints de cette façon, et je comprend pas tout ce que tu as mis en paramètre.

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Tout d'abord, il y a la documentation Oracle : https://docs.oracle.com/javase/tutor...t/gridbag.html, en anglais bien sûr.
    Ensuite, il y a l'article sur Developpez : http://bbclone.developpez.com/fr/jav...gridbaglayout/, en français bien sûr.
    Ensuite, il y a la recherche sur ce forum : en particulier, cette discussion, et ce message en particulier, ainsi que le lien qui s'y trouve.
    En complément, un petit bout de code qui pourra t'aider à mettre en point la grille ici.

    Par ailleurs, 2 ou 3 trucs, qui ne sont pas toujours précisés dans les docs :
    • contraitement à un GridLayout, la grille de prend pas toute la place dans le conteneur, mais sa taille dépend de son contenu
    • on peut utiliser la même instance de GridBagConstraints pour plusieurs composants, parce que la méthode add fait une copie de la contrainte. On peut utiliser différentes techniques, boucles en changeant les valeurs d'une instance unique de GridBagConstraints ou de plusieurs, création d'un GridBagConstraint à chaque itération, etc.
    • Même si des composants peuvent couvrir plusieurs cases de la grille, les cases ne se recouvrent pas, et ne dépassent pas : on définit bien une grille, dont les largeurs de colonnes ou de lignes sont différentes.
    • La grille est toujours centrée dans le conteneur tip : pour centrer un composant dans un autre, utiliser un GridBagLayout sur le conteneur avec la contrainte par défaut pour centrer un composant.
    • Le GridBagLayout contrôle la taille et la position de la grille et des composants, mais ne pas oublier qu'on peut parfois disposer certains sous-composants d'un composant (alignement par exemple dans les JLabel).
    • Il y a deux types de dimensionnement de composants :
      • la taille du composant dépend de son contenant, et la taille de la case dépend de sa taille
      • la case prend un certain espace dans ce qui existe, et, là, le composant s'adapte à la taille de la case. Il est important d'utiliser les paramètres wefth... pour indiquer la portion d'espace libre sur laquelle le composant peut s'étendre.
    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.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup pour tous ces conseils, sujet résolu !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/07/2011, 14h54
  2. Réponses: 2
    Dernier message: 21/08/2009, 13h41
  3. [SQL] SCRIPT pour avoir une navigation avec les lettres de l'alphabet
    Par gantec dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 20/09/2007, 08h45
  4. [eclipse][plugin] Comment avoir une fenêtre avec focus
    Par relivio dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 07/04/2004, 15h54

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