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 :

Supprimer espace GridLayout


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 46
    Par défaut Supprimer espace GridLayout
    Hello !

    Je bosse sur un projet dans lequel je dois créer un jeu du même style que CandyCrush (Ouais...)

    Bref, j'ai utilisé GridLayout pour afficher mes boules et comme vous pouvez le voir sur l'image, je n'arrive pas à supprimer l'espace entre chaque image.

    Nom : probleme_espace.PNG
Affichages : 427
Taille : 59,8 Ko

    J'ai essayé avec setHgap et setVgap, mais sans succès.
    Voilà 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
     
    public WindowVue() throws IOException 
        {
            this.gamePanel = new GamePanel();
            //this.content = this.gamePanel.createPanel();
     
            initUI();
        }
     
         /**
         * Initiate a basic window
         */
        private void initUI(/*ArrayList panelList*/) 
        {
            this.setTitle("ElementZ");          // Title of the window
    //        add(new Axes());
    //        this.setContentPane(this.content);       // Warn the JFrame that the panel will be his contentpane
            this.getContentPane().add(this.gamePanel);       // Warn the JFrame that the panel will be his contentpane
            this.setSize(800, 650);
            this.setLocationRelativeTo(null);   // Put the window in the middle of the screen
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    // Exit the windwo when you click on the red button
            this.setVisible(true);              // Set the window visible
        }
    }
    La classe GamePanel :
    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
     
    public class GamePanel extends JPanel
    {
        // Variables' and class's declaration
        private Panneau panelList[][];
    //    private JPanel bigPanel;
     
        public GamePanel() throws HeadlessException 
        {
            super();
            GridLayout gbl = new GridLayout(8,8,0,0);
     
            panelList = new Panneau[8][8];
            this.setLayout(gbl);
            for(int i = 0; i <= 7; i++)
            {
                for(int j = 0; j <= 7; j++) 
                {
                    Panneau panneau = new Panneau();       // Line 
                    add(panneau);
                    panelList[i][j] = panneau;
                }
            }
        }
    }
    Et enfin, la classe "Panneau" :
    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
     
    public class Panneau extends JPanel {
     
        // Variables' and class's declaration
        private Image img;
     
        public Panneau() 
        {
            super();
        }
     
        /**
         * Add an image to the window
         *
         * @param graphic
         */
        @Override
        public void paintComponent(Graphics graphic) 
        {
            // Try to add the image
            try 
            {
                this.img = ImageIO.read(new File("boule_0.jpg"));    // Put the image into the buffer
                graphic.drawImage(this.img, 0, 0, this.img.getWidth(null), this.img.getHeight(null), null); // Draw the image
            }
            catch (IOException ex) 
            {
                Logger.getLogger(WindowVue.class.getName()).log(Level.SEVERE, null, ex);
            }
            // TODO : Ajouter une fonction random pour ajouter aléatoirement une boule à un panel
        }
     
    }


    Est ce que vous auriez une idée ?
    Merci !


    Steackfrite

  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 : 56
    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,

    Le problème est qu'un GridLayout essaye de remplir tout l'espace du conteneur et se moque des dimensions des composants qui se trouvent dans les cases. Un GridBagLayout peut être configuré pour. Sinon un pack sur la JFrame devrait forcer la fenêtre à prendre le minimum de taille nécessaire, donc tu ne devrais plus voir les gaps, mais ça force la fenêtre à avoir une taille fixe limitée à celle de la grille (si tu l'agrandis à nouveau, les gaps vont réapparaître). Si tu mets ton panel avec GridLayout dans un panel avec FlowLayout, tu n'auras pas les gaps non plus ( parce que le flowlayout prend en compte les preferredsize). Mais ton composant ne pourra plus être centré verticalement, et il sera collé en haut de son conteneur (où alors il faut le remettre dans un autre, de type box :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Box verticalBox = Box.createVerticalBox();
    verticalBox.add(Box.createVerticalGlue());
    verticalBox.add(  le panel avec flowlayout );
    verticalBox.add(Box.createVerticalGlue());
    Tu vois que ça devient un peu compliqué.

    Le plus simple quand on fait des jeux comme ça est de faire le layout à la main, voire de dessiner directement dans le contexte graphique, ce qui te permettra en plus de faire les animations comme les déplacements des bonbons quand on les échangent (ce qui te sera impossible avec des LayoutManager).

    PS rien à voir avec ton problème, tu devrais lire ton image une fois pour toute hors du thread SWING (pas dans la méthode paint() donc), en constante de la classe par exemple : là à chaque redéssin de la fenêtre, ça recharge le fichier pour l'ensemble des 64 cases.
    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 averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 46
    Par défaut
    Tout d'abord merci pour ta réponse, c'était plutôt rapide ! =)

    Effectivement ça commence à devenir compliqué. Du coup, je vais pack tout ça et empêcher un redimensionnement et si j'ai le temps, j'essayerai avec les Box.

    Ah oui, bien vu pour l'image !

    Merci encore !

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

Discussions similaires

  1. [SQL] Supprimer espace avec .$var.
    Par wolflinger dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 17/05/2006, 12h03
  2. Supprimer espace avant insertion dans état
    Par aCe_GiK dans le forum Access
    Réponses: 5
    Dernier message: 24/04/2006, 18h34
  3. [SQL / ORACLE] Supprimer espace dans une phrase
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 10
    Dernier message: 31/01/2006, 17h29
  4. [CSS] Supprimer espace entre 2 div sous Internet explorer
    Par Torpedox dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 30/12/2005, 17h41
  5. Supprimer espace
    Par csauvage dans le forum Access
    Réponses: 2
    Dernier message: 22/06/2005, 12h53

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