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 :

Mettre un objet dans un JPanel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Apprenti systeme pour les transports
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Apprenti systeme pour les transports
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Par défaut Mettre un objet dans un JPanel
    Bonjour,

    J'essaye de faire un hexagone et ensuite de mettre cet hexagone dans une fenêtre. Pour l'instant j'arrive à l'ajouter à la frame mais si je veux l'ajouter à la frame via un JPanel il me sort une toute petite image avec un hexagone pas fini à l'intérieur.

    J'oublie peut-être une commande. J'ai essayer en réglant la taille de mon panel mais ça ne change rien.

    Je vous met mon code ci-dessous. Si vous voulez plus de renseignements merci de me le faire savoir et merci pour votre aide.

    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
    package hex;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.LayoutManager;
    import java.awt.event.MouseEvent;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
     
    public class Hex {
     
     
        JFrame frame = new JFrame();
        JPanel hexagonePanel = new JPanel();
        Hexagone hexagone;
        boolean redBlue = false;
     
        public Hex() {
     
            hexagone = new Hexagone();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(700, 450);
            hexagonePanel.add(hexagone);
            frame.add(hexagonePanel);
            frame.setVisible(true);
     
        }
     
        public static void main(String[] args) {
     
            Hex hex = new Hex();
     
        }

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Poste ta classe Hexagone avec une description.
    Tu devrais utiliser des layout sur ta frame et ton panel.

  3. #3
    Membre averti
    Homme Profil pro
    Apprenti systeme pour les transports
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Apprenti systeme pour les transports
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Par défaut
    Oui je compte mettre des layout quand j'aurais réussi à faire ça.

    Voici ma classe Hexagone:

    Je crée un hexagone non rempli puis un autre rempli pour qu'il soit de la couleur que je veux mais toujours avec des contours noir tout simplement.

    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
     
    package hex;
     
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.RenderingHints;
    import javax.swing.JPanel;
     
    /**
     *
     * @author Gabou
     */
    public class Hexagone extends JPanel {
     
     
        private int xHex[] = {0, 16, 32,32,16,0};
        private int yHex[] = {10,0,10,30,40,30};
     
        private int xHexInt[] = {1, 16, 31,31,16,1};
        private int yHexInt[] = {10,1,10,30,39,30};
     
        private Color couleur = Color.WHITE;
        public Hexagone(){
     
        }
     
        @Override
            public void paintComponent(Graphics g) {
     
            Graphics2D g2d = (Graphics2D)g;
            RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g2d.setRenderingHints(hints);
     
            g2d.drawPolygon(xHex, yHex, 6);
            g2d.setColor(couleur);
            g2d.fillPolygon(xHexInt, yHexInt, 6);
     
            }
     
        public Color getCouleur() {
            return couleur;
        }
     
        public void setCouleur(Color couleur) {
            this.couleur = couleur;
        }
     
     
    }

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Avec des Layout ça marche mieux. Le layout par défaut est FlowLayout. Avec ce layout les composants ne s'agrandissent pas pour prendre toute la place. Du coup ton panel était tout petit (width=10, height=10 sur mon poste).

    Un peu de doc :
    http://docs.oracle.com/javase/tutori...ut/visual.html
    http://docs.oracle.com/javase/tutori...out/using.html

    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
    package hex;
     
    import java.awt.BorderLayout;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
     
    public class Hex {
     
     
        JFrame frame;
        JPanel hexagonePanel;
        Hexagone hexagone;
        boolean redBlue = false;
     
        public Hex() {
     
            hexagone = new Hexagone();
            frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(700, 450);
            hexagonePanel = new JPanel();
            hexagonePanel.setLayout(new BorderLayout());
            hexagonePanel.add(hexagone, BorderLayout.CENTER);
            frame.setLayout(new BorderLayout());
            frame.add(hexagonePanel, BorderLayout.CENTER);
            frame.setVisible(true);
     
        }
     
        public static void main(String[] args) {
             Hex hex = new Hex();
        }
    }
    Au passage, si ton hexagone est déjà un JPanel, pas besoin de le placer dans un JPanel intermédiaire.

  5. #5
    Membre averti
    Homme Profil pro
    Apprenti systeme pour les transports
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Apprenti systeme pour les transports
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Par défaut
    Ah ouais j'arrive à afficher mon hexagone dedans.

    En fait le but final serait de faire plusieurs hexagone côte à côte (http://upload.wikimedia.org/wikipedi...oard_11x11.svg) que je puisse mettre dans un panel (c'est pour ça que j'essaye de mettre un panel dans un panel).

    Je réfléchi là-dessus et je poste ce soir pour dire si j'ai trouvé ou pas.

    Merci pour ton aide.

    PS: Peut-on utiliser des setBounds avec des layouts?

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Pour faire simple, tu crées un composant héritant de JComponent, tu redéfinis la méthode protected paintComponent, et tu dessines sur les graphics fournis en paramètre de cette méthode tous tes hexagones.

    La version avec un composant par hexagone n'est pas tenable, chiante en terme de maintenance... Bref, aucun intérêt à celle ci.

    Alors qu'avec un seul composant, ce sera amplement plus simple.

    Tu te fais une classe servant de modèle (position & statut des différent hexagones), et tu t'appuies sur ce modèle dans ta classe héritant de JComponent pour réaliser les opérations de dessin dans le paintComponent

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

Discussions similaires

  1. Insérer un tableau d'objet dans un Jpanel
    Par Flophx dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 25/04/2006, 20h37
  2. Déplacer des objets dans un JPanel
    Par hammag dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 23/03/2006, 11h13
  3. [JPanel]Mettre une image dans un JPanel
    Par ehmppowa dans le forum Composants
    Réponses: 11
    Dernier message: 30/11/2005, 20h17
  4. [JPanel] parcours d'objets dans un JPanel
    Par fleur1234 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 17/01/2005, 13h24
  5. Mettre un objet dans un TListView
    Par FredericB dans le forum C++Builder
    Réponses: 4
    Dernier message: 20/04/2004, 09h32

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