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

API standards et tierces Java Discussion :

[Java] Redimensionnement des composants en même temps que la fenêtre


Sujet :

API standards et tierces Java

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 80
    Points
    80
    Par défaut [Java] Redimensionnement des composants en même temps que la fenêtre
    Bonjour,

    je suis entrain de créer un logiciel en Java.
    Je construit mon interface sans layout afin de pouvoir placer tous mes composants où je le désire.
    Mon problème intervient lorsque je modifie la taille de la fenêtre. La taille des composants ne change pas en même temps.

    Savez-vous comment faire pour remédier à ceci ?

    Merci.
    Bonne journée.

  2. #2
    Membre éclairé Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Points : 698
    Points
    698
    Par défaut
    J'ai envie de dire met un layout c'est à ça que ça sert et si tu t'en sert correctement tu peux positionner tes composants où tu veux...

    Mais je ne suis pas un expert et il y a surement un moyen de faire sans.

  3. #3
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Il faut utiliser un layout !
    Extrêmement rares sont les cas ou l'usage d'un layout n'est pas possible.
    Et si, malgré la profusion de layout disponible, tu ne trouves pas ton bonheur, tu as toujours la possibilité de créer ton propre layout.

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 80
    Points
    80
    Par défaut
    Je suis d'accord avec toi mais avec un layout existant pour faire exactement ce qu'on veut avec les composants ça me parait compliqué.

    Celui qui à l'air de laisser le plus libre est GridBagLayout d'après ce que j'ai pu lire sur internet mais ça à l'air compliqué à mettre en place.

    Il y quelque chose que je ne dois pas faire correctement car lorsque je fais :
    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
     
    public class View extends JFrame{
     
    private JPanel panelLateral = new JPanel();
     
      public View()
      {
            this.setSize(1200, 700);
            this.setLocationRelativeTo(null);
            this.getContentPane().setLayout(new GridBagLayout());        
     
      GridBagConstraints placementPanelLateral  = new GridBagConstraints();       
            placementPanelLateral.gridx = 20;
            placementPanelLateral.gridy = 100;
            placementPanelLateral.gridwidth = 120;
            placementPanelLateral.gridheight = 550;
            this.getContentPane().add(panelLateral,placementPanelLateral);
     
            this.setVisible(true);
        }
    }
    j'ai un petit carré au milieu de ma fenêtre et pas du tout le panel que je souhaiterai avoir.

  5. #5
    Membre éclairé Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Points : 698
    Points
    698
    Par défaut
    http://docs.oracle.com/javase/tutori...t/gridbag.html

    Commence par lire ça ensuite je te conseille:

    -Prendre une feuille et un stylo
    -tracer une représentation grossière de ton écran et surtout des composants qui le composent
    -Tracer une grille permettant de placer chaque composant correctement. ( pour simplifier: chaque bord gauche d'un composant donne une nouvelle colonne et chaque bord haut une nouvelle ligne) en pensant à commence les axes à 0
    -Ajouter les divers composants en se référant à ton schéma pour savoir rapidement x, y et width, height


    en regardant l'exemple que tu donnes j'ai l'impression que tu n'as pas du tout compris l'intérêt ni même le fonctionnement du grid bag layout en gros tu dit: place mon panel à la 20eme colonne, 100eme ligne, sur 120 colonnes de large et 500 de haut....

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 80
    Points
    80
    Par défaut
    Merci, je vais lire ceci, tester et je vous dis si ça marche comme je veux.

    PS : je sais déjà exactement comment je veux placer mes différents composants vu que je l'ai déjà fais sans layout.

  7. #7
    Membre éclairé Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Points : 698
    Points
    698
    Par défaut
    Il faut juste arriver à comprendre que comme le gridbag layout est un spécialiste du positionnement relatif, on ne donne aucune dimension fixe.

    Tout est basé sur les différents composants les uns par rapport aux autres et par rapport aux dimensions de la fenêtre. En gros pour dire "je veux que mon frame soit coupé en deux dans la hauteur avec un panel de chaque côté" en grid bag layout il faut traduire: "dans le layout de mon frame, j'ai deux colonnes et une seule ligne. Dans la première case j'ai un panel qui va remplir entièrement cette case et dans la colonne deux j'ai un autre panel qui va la remplir entièrement aussi. Ces deux panneaux ont la même importance (weight)"

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 80
    Points
    80
    Par défaut
    Voici ce que j'ai compris :

    - gridx et gridy représentent les coordonnées ((0,0) étant la "case" en haut à gauche).
    - fill permet de mettre un composant sur toute la largeur et/ou toute la hauteur de la fenêtre.
    - gridwidth et gridheight permettent de définir le nombre de cases verticales et horizontales que va utiliser le composant.
    - ipadx et ipady permettent de régler la taille du composant.
    - instets permet de régler la distance entre un composant et les bords de la "case".
    - anchor permet de placer le composant à l'intérieur de la "case".
    - weightx et weighty vont gérer l'espace entre les composant lorsqu'on modifie la taille de la fenêtre.

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Si tu veux placer les composant l'un par rapport à l'autre, le spring layout, bien que assez verbeux, est bien adapté. Là dedans, tu dis: le bouton X doit être collé à droite du Y et en dessous tu Label Z par exemple.

    Tu peux aussi jeter un oeil au relative layout ici
    http://code.google.com/p/relativelay...LayoutTutorial
    mais là ce n'est plus standard

  10. #10
    Membre éclairé Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Points : 698
    Points
    698
    Par défaut
    Je connaissais pas ces layouts tchize, merci.

    Citation Envoyé par Yann_69 Voir le message

    - gridx et gridy représentent les coordonnées ((0,0) étant la "case" en haut à gauche). ----> Oui
    - fill permet de mettre un composant sur toute la largeur et/ou toute la hauteur de la fenêtre. ---> la largeur de la case
    - gridwidth et gridheight, je ne comprend pas vraiment. D'après ce que je pensais avoir compris, ils permettent de définir le nombre de lignes et de colonnes dans la fenêtre. ---> permet de dire prend trois cases de long, 2 de large
    - ipadx et ipady permettent de régler la taille du composant. --> oui
    - instets permet de régler la distance entre un composant et les bords de la "case".----> oui
    - anchor permet de placer le composant à l'intérieur de la "case". ----> oui
    - weightx et weighty je ne vois pas vraiment. ----> ça permet de "donner de l'importance aux éléments" en gros si tu as deux boutons en fill sur deux cases que tu en met 1 avec le poid à 9 en largeur et l'autre avec le poids à 1 celui a neuf prendra le plus de place possible.

    ça peut donner un truc comme ça :
    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
     
    public class View extends JFrame{
     
    private JPanel panelLateral = new JPanel();
    private JPanel panelCentral = new JPanel();
     
      public View()
      {
            this.setSize(1200, 700);
            this.setLocationRelativeTo(null);
            this.getContentPane().setLayout(new GridBagLayout());        
            GridBagConstraints c = new GridBagConstraints();
            c.gridx = 0;
            c.gridy = 0;
            c.gridwidth = 1;
            c.gridheight = 1;
            c.fill = GridBagConstraints.BOTH;
            c.ipadx = 200;
     
            panelLateral.setBackground(Color.red);
            this.getContentPane().add(panelLateral,c);
     
            GridBagConstraints c2 = new GridBagConstraints();
            c2.gridx = 1;
            c2.gridy = 0;
            c2.gridwidth = 1;
            c2.gridheight = 1;
            c2.fill = GridBagConstraints.BOTH;
            c2.weightx = 3.0;
            c2.weighty = 7.0;
            panelCentral.setBackground(Color.blue);
            this.getContentPane().add(panelCentral,c2);
     
            this.setVisible(true);
        }
    }

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 80
    Points
    80
    Par défaut
    Merci, je pense que je vais continuer avec le GridBagLayout.
    Je pense avoir à peu près compris et je commence à m'approcher de ce que je souhaite.

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

Discussions similaires

  1. Sauvegarde des macros en même temps que le classeur
    Par Aureus Magnus dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 11/07/2013, 15h58
  2. Redimensionner JPanel en même temps que JFrame
    Par nosdo dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 02/01/2010, 13h19
  3. Redimensionnement d'une image en même temps que sa JFrame
    Par mandou1 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 22/06/2007, 11h04
  4. Redimensionnement des composants
    Par hush dans le forum Agents de placement/Fenêtres
    Réponses: 20
    Dernier message: 21/08/2005, 11h07
  5. Comment fermer l'application en même temps que Windows ?
    Par semaj_james dans le forum Langage
    Réponses: 4
    Dernier message: 23/06/2004, 22h17

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