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 :

Petit soucis avec GridBagLayout ...


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Points : 114
    Points
    114
    Par défaut Petit soucis avec GridBagLayout ...
    Salut !

    Toujours dans le cadre du projet de Sudoku, j'ai un peu de mal à agencer mes composants dans ma fenetre.

    En fait, celle-ci devrait se présenter comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    --------------------------
    |      |                 |
    |  1   |                 |
    |      |                 |
    |------|       3         |
    |      |                 |
    |  2   |                 |
    |      |                 |
    |      |                 |
    --------------------------
    Le panel 3 est composé d'un GridLayout (ma grille de sudoku).
    Le panel 1 va contenir une grille qui contient les chiffres de 1 à 9.
    Le 2, on ne s'en occupe pas pour le moment.

    J'ai appliqué un BorderLayout sur le panel principal de ma JFrame (3 à l'est et 1-2 à l'ouest). Jusque là, tout va bien.
    Je m'étais donc dit que j'appliquerais un GridBagLayout à la partie ouest (vu que 1 et 2 n'ont pas la meme taille). Seulement, si j'ai bien compris, je dois appliquer les contraintes sur des composants; or, ici, moi je voudrais que ces contraintes s'appliquent sur les panels (1 et 2).

    Comment dois-je m'y prendre ?

  2. #2
    Membre confirmé Avatar de calogerogigante
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 516
    Points
    516
    Par défaut
    Salut Mike ( www.opensupport.be est un peu mort, n'est-ce pas ? ;-) )

    Essaie ce petit code, et dis-moi si ça t'aide : cela place 3 panels exactement comme tu l'as demandé :

    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
    import javax.swing.*;
    import java.awt.*;
     
    class MaFenetre extends JFrame
    {
    public static int x[]   = { 0, 0, 1};
    public static int y[]   = { 0, 1, 0};
    public static int larg[]= { 1, 1, 3};
    public static int haut[]= { 1, 2, 3};
    public static int px[]  = {20,20,60};
    public static int py[]  = {20,40,60};
    public static JPanel pan1;
    public static JPanel pan2;
    public static JPanel pan3;
     
    public MaFenetre()
      {
      setTitle("Exemple");
      setSize(800,500);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      Container contenu = getContentPane();
      GridBagLayout g = new GridBagLayout();
      contenu.setLayout(g);
      GridBagConstraints c = new GridBagConstraints();
                         c.fill = c.BOTH ;
     
         pan1=new JPanel();
         pan1.setBackground(Color.blue);
         pan2=new JPanel();
         pan2.setBackground(Color.white);
         pan3=new JPanel();
         pan3.setBackground(Color.red);
     
      for (int i=0; i<x.length; i++)
          {
         c.gridx=x[i]; c.gridy=y[i];
         c.gridwidth=larg[i]; c.gridheight=haut[i];
         c.weightx=px[i]; c.weighty=py[i];
         switch(i)
            {
         case 0: contenu.add( pan1, c ); break;
         case 1: contenu.add( pan2, c ); break;
         case 2: contenu.add( pan3, c ); break;
            }
          }
      }
    }
     
     
    public class GUI_complique_01
    {
    public static void main (String args[])
       {
       MaFenetre fen = new MaFenetre();
       fen.setVisible(true);
       }
    }
    Le GridBagLayout, c'est simple ! ;-)
    Bon Sudoku !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Points : 114
    Points
    114
    Par défaut
    Merci Calo !!

    C'est quand un machin vicieux à prendre en main ce GridBagLayout ...


    N.B.: Qu'est-ce qui se passe avec le forum ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Points : 114
    Points
    114
    Par défaut
    Est-ce qu'il est possible de ne pas afficher le quadrillage d'un GridLayout (ou le rendre transparent) ?

    J'ai beau chercher, je ne trouve pas ...

  5. #5
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Les layouts n'affichent rien, ils se contentent de placer les composants.
    L'effet grille vient du fait que tous les composants ont une bordure.
    Il faut donc faire sur chaque composant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    monComposant.setBorder(null);
    panel3.add(monComposant);

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par xavlours
    Les layouts n'affichent rien, ils se contentent de placer les composants.
    L'effet grille vient du fait que tous les composants ont une bordure.
    Il faut donc faire sur chaque composant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    monComposant.setBorder(null);
    panel3.add(monComposant);
    Ah ben oui; suis-je bête

    Thx


    EDIT : J'ai quand meme un souci car je ne veux "deleter" que le quadrillage interne, pas le bord externe !...

  7. #7
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Alors tu mets une bordure au panel3

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par xavlours
    Alors tu mets une bordure au panel3
    Bon ben ça a l'air de marcher...

    Y'a quand meme un truc idiot. Si je voulais, par ex, créer un espace autour de mon panel avec un CreateEmptyBorder, je ne pourrais plus créer une bordure (puisqu'elle sera vide) ...
    Comment on pourrait remédier à ça dans ce cas là ?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Points : 114
    Points
    114
    Par défaut
    Autre chose :




    Vous voyez le carré en rouge (de 1 à 9) dans le carré plus grand (lui aussi de 1 à 9). C'est un GridLayout dans un autre GridLayout.

    J'ai laissé le look & feel par défaut de la version 1.5.

    Vous voyez par exemple le 6 (à coté du carré rouge), le fond de sa case est en seul bloc, contrairement au carré rouge (normal puisque que c'est un GridLayout dont j'ai oté le quadrillage interne).

    Est-ce qu'il serait possible d'avoir dans ce carré rouge un fond d'un seul bloc (comme le 6 par ex) ?
    Je pense en fait qu'il faudrait laisser le background vide lors de la création du GridLayout du carré rouge ... Qu'en pensez-vous ?

    NB : J'espère que mes explications sont pas trop chinoises :o

  10. #10
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Pour ta première question, tu peux utiliser une compoundBorder, qui met deux bordures l'une à l'intérieur de l'autre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BorderFactory.createCompoundBorder(
            BorderFactory.createEmptyBorder(2, 2, 2, 2),
            BorderFactory.createLineBorder(Color.BLACK, 5)    );
    Pour ta deuxième question, si tu veux redéfinir l'affichage des boutons, il faut le redéfinir en entier. Pour faire cet effet, Swing utilise un GradientPaint.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Points : 114
    Points
    114
    Par défaut
    Merci pour tes réponses !!

    C'est ça qui m'énerve un peu avec Java; il existe tellement de trucs qu'on peut etre sur qu'il y a une solution à chaque problème mais en même temps, on se noie dans la masse de commandes possibles (et c'est franchement décourageant de toujours devoir chercher pendant un sacré bout de temps pour venir à bout d'un petit soucis ).

  12. #12
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Meu non courage gars!!!!

    Le langage est très étendu et c'est génial! C'est bien d'avoir plusieurs possibilités pour résoudre nos problèmes! Ce serait pas amusant s'il n'y avait qu'une solution

Discussions similaires

  1. petit soucis avec mon graveur
    Par Vador dans le forum Périphériques
    Réponses: 8
    Dernier message: 02/11/2005, 15h58
  2. petit soucis avec les listes
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/09/2005, 11h08
  3. Petit souci avec clause where
    Par ybruant dans le forum SQL
    Réponses: 1
    Dernier message: 21/07/2005, 23h10
  4. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 14h45
  5. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 17h52

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