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 :

layout awt avec composant swing


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2003
    Messages : 65
    Par défaut layout awt avec composant swing
    bonjour à tous!

    je suis actuellement face à un dilemme :
    depuis toujours, j'entends dire qu'il ne faut pas mélanger AWT et SWING.
    Alors, peut on utiliser un layout de AWT (comme les fameux GridBagLayout ou BorderLayout) pour des composants swing??

    Ceci étant dit, j'ai donc quelques questions :
    • si j'utilise un BorderLayout avec des composants SWING et que je veux imposer une taille initiale à un composant, vaut-il mieux que j'utilise setSize (swing) ou setPrefered/Minimum/MaximumSize (awt)?
    • De même, si je veux imposer une taille initiale à ma JFrame, quel méthode vaut-il mieux que j'utilise?
    • question subsidiaire, j'ai entendu dire que selon les OS, il y avait quelques légères différences concernant la gestion de la taille, info ou intox (perso je penche plutôt pour info)


    Dernière question, quel est l'intérêt, du point de vue génie logiciel, d'avoir fait hériter swing de awt plutôt que d'avoir utiliser la délégation?

    merci d'avance

    mobi

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Lorsqu'on dit qu'il ne faut pas mélanger swing et awt, il s'agit uniquement des composants graphiques qui héritent de java.awt.Component (à part le JComponent, bien sûr).

    Sinon, swing utilise pas mal de choses de awt : Graphics, les layouts, EventQueue...

    Le BorderLayout est un layout mal pratique si tu veux fixer des tailles aux composants. Pour te répondre plus complètement sur ces histoires de tailles, pourrais-tu nous dire quelle sorte de répartition voudrais-tu donner à tes composants ?

    Pour donner la taille que tu veux à ta fenêtre, il suffit de ne pas appeler la méthode pack, et de te débrouiller avec le déclenchement des layouts.

    Pourquoi l'héritage et pas la déléguation dans swing ? C'est que, à l'époque de swing, l'héritage était encore à la mode. La déléguation, aussi, vivra ce que vivent les roses... Vivons avec les roses ?

  3. #3
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2003
    Messages : 65
    Par défaut
    Citation Envoyé par gifffftane Voir le message
    Le BorderLayout est un layout mal pratique si tu veux fixer des tailles aux composants. Pour te répondre plus complètement sur ces histoires de tailles, pourrais-tu nous dire quelle sorte de répartition voudrais-tu donner à tes composants ?
    je n'ai pas d'exemple particulier. En fait, ma question porte pour toutes les configurations possible.

    Citation Envoyé par gifffftane Voir le message
    Pour donner la taille que tu veux à ta fenêtre, il suffit de ne pas appeler la méthode pack, et de te débrouiller avec le déclenchement des layouts.
    donc, si je fixe la taille de chacun de mes composants et que je n'appelle pas la méthode pack(), ma JFrame aura automatiquement la bonne taille??? a moins que je ne comprenne pas correctement le sens de "déclenchement des layouts"

    mobi

  4. #4
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    En java, en tous les cas en swing, il vaut mieux éviter de raisonner en taille des composants graphiques, mais il faut préférer raisonner selon leurs dispositions respectives.

    Par exemple, avec la disposition BorderLayout, il y a un panneau au centre, un au sud, au nord, est et ouest. C'est tout (ou à peu près) ce qu'on sait. Les tailles exactes sont inconnues, et il est mieux qu'elles le restent.

    Bien sûr il n'est pas toujours possible, ni même souhaitable, de raisonner comme ça, mais c'est à cela qu'il faut s'entrainer.

    Les composants swing encadrent les variations possibles, avec les notions de maximumSize, minimumSize, et preferredSize, mais ces valeurs ne sont pas respectées par tous les layouts. Elles le sont par les layouts swing, comme le BoxLayout. Je ne crois pas qu'elles le soient par le BorderLayout.

    En mettant un maximum, minimum et preferred égaux, et en utilisant un layout swing il est possible de fixer la taille des composants, mais c'est juste une combine.

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 913
    Billets dans le blog
    54
    Par défaut
    Sinon, il est possible de mettre le layout a null et de positionner toi-meme tes composants dans leur containeur. Ou d'utiliser un GridBagLayout mais la ca devient vite complexe. Le mieux reste probablement d'utiliser un editeur graphique/visual editor comme matisse pour Netbeans (et Eclipse ?) qui supporte le GroupLayout et ensuite de rendre la fenetre/la boite de dialogue non-redimentionnable.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2003
    Messages : 65
    Par défaut
    Citation Envoyé par gifffftane Voir le message
    Les composants swing encadrent les variations possibles, avec les notions de maximumSize, minimumSize, et preferredSize, mais ces valeurs ne sont pas respectées par tous les layouts. Elles le sont par les layouts swing, comme le BoxLayout. Je ne crois pas qu'elles le soient par le BorderLayout.
    en fait, je viens de voir qu'il y a deux minimum/maximum/preferredSize : un fourni par la classe Component et un fourni par la classe JComponent. Est-ce que les layout awt respectent les mini/maxi/prefSize de Component et les layout swing respectent les mini/maxi/prefSize de JComponent?

    Quel est le lien entre les mini/maxi/prefSize de JComponent et ceux de Component?

    merci d'avance
    mobi

  7. #7
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Je pense qu'il n'y a pas de différence fondamentale sur ces questions entre swing et awt.

    Concernant minimum/maximum/preferred, je pense que ces notions sont d'abord apparues sur les composants swings, et comme elles sont pratiques, Sun les a intégrées à un niveau plus général (java.awt.Component).

    La différence pourrait se trouver dans l'implication du look and feel, qui n'existe que dans swing.

    Les layouts disposent les composants selon ce qu'ils veulent : s'ils veulent mettre les composants awt tout en haut et les composants swing tout en bas, ils le peuvent.

    (en général, ils essaient de faire des choses raisonnables).

  8. #8
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2003
    Messages : 65
    Par défaut
    Citation Envoyé par gifffftane Voir le message
    Les composants swing encadrent les variations possibles, avec les notions de maximumSize, minimumSize, et preferredSize, mais ces valeurs ne sont pas respectées par tous les layouts. Elles le sont par les layouts swing, comme le BoxLayout. Je ne crois pas qu'elles le soient par le BorderLayout.
    comment savoir quel sont les layout qui respectent les min/max/pref? j'ai regarder la javadoc qui n'est pas toujours explicite sur ce point. est-ce moi qui est mal compris?

    et dans tout ça, a quoi sert la méthode "setSize"?

  9. #9
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Oui, les javadocs ne sont pas toujours explicites sur ce point.

    La méthode setSize sert, par exemple, au... layout

    Elle sert également pour des composants dont il faut fixer la taille, même en présence d'un layout, parce qu'il n'est pas possible de déduire leur taille à partir de leur sous-composants.

    Par exemple le JScrollPane peut avoir un scroll de n'importe quelle taille : on l'utilise précisément pour ça, et donc on ne peut connaître sa taille par analyse de ses composants, comme pour la plupart des autres composants graphiques ; il faut donc fixer la taille de quelque chose à un moment ou à un autre, soit du scroll, soit du JScrollPane, soit même d'un des composants qui l'englobe.

  10. #10
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2003
    Messages : 65
    Par défaut
    Citation Envoyé par gifffftane Voir le message
    Oui, les javadocs ne sont pas toujours explicites sur ce point.
    et mis à part tester toutes les possibilitées une à une à la main, il y a des doc explicites la dessus?

    Citation Envoyé par gifffftane Voir le message
    La méthode setSize sert, par exemple, au... layout
    gni?? explications?

    Citation Envoyé par gifffftane Voir le message
    Par exemple le JScrollPane peut avoir un scroll de n'importe quelle taille : on l'utilise précisément pour ça, et donc on ne peut connaître sa taille par analyse de ses composants, comme pour la plupart des autres composants graphiques ; il faut donc fixer la taille de quelque chose à un moment ou à un autre, soit du scroll, soit du JScrollPane, soit même d'un des composants qui l'englobe.
    et (one again) pourquoi setSize plutot que setPreferredSize?

    mobi

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Par défaut
    Les méthodes setSize() et setBound() servent à fixer la taille réelle du composant à l'écran. On les utilises systématiquement sur les composants lorsqu'il sont dans un container qui n'a pas de layout. S'il y a un layout, utiliser ces méthodes n'a pas de sens, car c'est le layout qui décide de la position et de la taille des composants qu'il gère, il va donc utiliser lui-même setSize/setBound en fonction de ses propres calculs.

    Les méthodes setPreferredSize() & Cie ne servent que s'il y a un layout en lui donnant des indications pour effectuer ses calculs et déterminer la taille de chacun des composants.

    Quelques exceptions notoires pour le setSize() qui peut être utile même s'il y a un layout, fixer la taille du viewport d'un JScrollPane par exemple.

    Fred

  12. #12
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2003
    Messages : 65
    Par défaut
    d'accord!

    dernière question, si je fixe la taille d'un JScrollPane avec setSize et que j'utilise un layout, mon JScrollPane aura la taille que j'ai fixée via le setSize ou aura une taille décidée par le layout?

    et y a-t-il d'autre exemple notoire comme les JScrollPane?

    merci
    mobi

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Par défaut
    Citation Envoyé par mobi38 Voir le message
    dernière question, si je fixe la taille d'un JScrollPane avec setSize et que j'utilise un layout, mon JScrollPane aura la taille que j'ai fixée via le setSize ou aura une taille décidée par le layout?
    Ton setSize() va être écrasé par le setSize() fait par le layout du container dans lequel se trouve ton scrollpane.

    Citation Envoyé par mobi38 Voir le message
    et y a-t-il d'autre exemple notoire comme les JScrollPane?
    C'est le seul qui me viennent à l'esprit, mais il doit y en avoir d'autres.

    Fred

  14. #14
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2003
    Messages : 65
    Par défaut
    Citation Envoyé par kwxyz Voir le message
    Ton setSize() va être écrasé par le setSize() fait par le layout du container dans lequel se trouve ton scrollpane.
    Fred
    donc en gros, quand on utilise un layout, la méthode setSize() ne sert absolument à rien, meme pour un JScrollpane?!

    mobi

  15. #15
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Par défaut
    Citation Envoyé par mobi38 Voir le message
    donc en gros, quand on utilise un layout, la méthode setSize() ne sert absolument à rien, meme pour un JScrollpane?!
    Pour la taille du scrollpane même oui, mais pas son viewport !

    Fred

  16. #16
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2003
    Messages : 65
    Par défaut
    Citation Envoyé par kwxyz Voir le message
    Pour la taille du scrollpane même oui, mais pas son viewport !
    ok merci, et dernière question, la taille du viewport impose-t-elle celle du scrollpane? j'imagine que le scrollpane ne peut pas être plus petit que le viewport, mais est-ce qu'un scrollpane plus grand que la taille imposée par le viewpane aura pour conséquence d'agrandir le viewport?

    mobi

  17. #17
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Par défaut
    Non, les deux tailles sont indépendantes.

    Le Viewport peut évidement être plus grand que le scrollpane.
    Dans ce cas, on voit les barres de défilements pour pouvoir accéder à la totalité du viewport.

    En revanche, je ne sais pas si on peut avoir un viewport plus petit que le scrollpane.
    Comme ça, je dirais non, mais je n'en suis pas sûr.

    Fred

  18. #18
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2003
    Messages : 65
    Par défaut
    Citation Envoyé par kwxyz Voir le message
    Non, les deux tailles sont indépendantes.
    ah?
    Citation Envoyé par kwxyz Voir le message
    Le Viewport peut évidement être plus grand que le scrollpane.
    Dans ce cas, on voit les barres de défilements pour pouvoir accéder à la totalité du viewport.
    tu parles bien du JViewport et pas du scrollable client? (cf schéma dans la javadoc du JScrollPane)

    mobi

  19. #19
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Par défaut
    Citation Envoyé par mobi38 Voir le message
    tu parles bien du JViewport et pas du scrollable client? (cf schéma dans la javadoc du JScrollPane)
    Effectivement, j'ai tendance à mélanger les deux et à utiliser le terme viewport pour viewport view (scrollable client).
    Désolé si cela à contribué à la confusion.

    Fred

  20. #20
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2003
    Messages : 65
    Par défaut
    ok, donc le setSize set pour fixer la taille du scrollable client? (je sens que je touche du doigt la solution )

    mobi

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/11/2008, 10h43
  2. probleme avec l'info bulle des composant swing
    Par jeanfeu dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 19/06/2008, 16h21
  3. Crée une IHM swing ou awt avec netbeans
    Par Wilgard dans le forum NetBeans
    Réponses: 3
    Dernier message: 18/04/2007, 12h03
  4. Grosse appli avec des composants Swing ?
    Par marmotte dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 13/10/2006, 15h53
  5. Affichage instable avec les composants SWING
    Par valfajr dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 05/05/2006, 01h04

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