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 :

Donner le focus à un JPanel dans un autre JPanel


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 28
    Points : 22
    Points
    22
    Par défaut Donner le focus à un JPanel dans un autre JPanel
    Bonjour,

    Voici mon problème :

    J'ai une JFrame qui contient un JPanel contenant lui même 2 autres JPanel.
    J'arrive à donner le focus au JPanel de la JFrame et j'aimerai donner le focus à un des JPanel contenu dans le JPanel de la JFrame.

    Si quelqu'un à une idée, elle est la bien venu.

  2. #2
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    il doit y avoir une methode de la classe JPanel qui te rend la liste de ces composent, un getComponents() par exemple qui doit te retourner un tableau de component... et en choisissant le bon element tu lui donne le focus...

    voir l'api sur java.sun.com...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    j'ai déjà fait un requestFocus sur le JPanel auquel je veut donner le focus mais ca fait rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Game extends JPanel{
        private GameInfo info;
        private GameAffichage affichage;
     
        public Game(){
            this.setLayout(new BorderLayout());
            this.info = new GameInfo();
            this.add(this.info, BorderLayout.NORTH);
            this.affichage = new GameAffichage();
            this.affichage.requestFocus();
            this.add(this.affichage , BorderLayout.CENTER);
        }
    }

  4. #4
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Et qu'attends-tu que ça fasse ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    bah ke this.affichage prenne le focus. Car j ai mis mon listener dans cette classe qui doit gerer les event et pas dans Game.

  6. #6
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    quel type de listener ? pour quel type d'event ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    keylistener. C un jeu j aimerai bien ke mon personnage se deplace a gauche quand je presse la touche gauche. Si je met le panel seul ca fonctionne mais depuis ke je l ai insere dans un autre jpanel ca ne fonctionne plus et j ai absolument besoin q il soit inserer dans un autre jpanel.

  8. #8
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    une idée, à tester... construis ton interface entièrement et seulement après avoir fait setVisible(true) sur la JFrame principale, fais affichage.requestFocus();

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Je peux pas car au demarrage du jeu une jframe est lance et le jpanel est le menu ensuite en pressent la touche entre sur mon jlabel new game mon panel devient le panel jeu qui contient deux panel : celui de type info et celui de type affichage.
    Le truc c ke la le panel qui a le focus est le panel contenant les deux sous panels.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Si kelkun a la moindre idee q il la donne. Merci d avance.

  11. #11
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    Pour qu'un composant puisse obtenir le focus il faut qu'il soit " visible, enabled, and focusable."
    As tu ces trois propriétés avant de mettre le focus sur tes panels?
    A bientôt,
    Magguy

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    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
    public class Game extends JPanel implements KeyListener{
        private GameInfo info;
        private GameAffichage affichage;
     
        public Game(){
            this.setLayout(new BorderLayout());
            this.info = new GameInfo();
            this.add(this.info, BorderLayout.NORTH);
            this.affichage = new GameAffichage();
            this.add(this.affichage , BorderLayout.CENTER);
            this.addKeyListener(this);
            this.affichage.requestFocus();
        }
     
        public void keyReleased(KeyEvent event) {}
     
        public void keyTyped(KeyEvent event) {}
     
        public void keyPressed(KeyEvent event) {
            int key = event.getKeyCode();
            switch (key) {
            case KeyEvent.VK_ESCAPE:
                GUI.getFrame().setPanel(new GameMenu());
            break;
            }
        }
    }
    cette classe est appelé par une JFrame qui lui donne le focus. Comment donner le focus au Jpanel Affichage ? J'ai essayer de mettre des setVisible, setEnabled et setFocusabled sur le JPanel Affichage mais ca na rien changé.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Decidement, personne ne trouvera une solution

  14. #14
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    C'est normal, affichage n'implémente pas KeyListener

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    sisi j'ai un keylistener dans ma classe Affichage. Le key listener de la classe Game, c'est juste pour voir ki a le focus.

  16. #16
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    pour tester, mets en commentaires tous les addKeyListener() sauf celui de la classe GameAffichage.

  17. #17
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Chez moi le code suivant fonctionne correctement :
    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
    58
    59
    60
    61
    62
    63
    64
     public class Test extends JFrame {
     
        public Test() {
            initComponents();
            jPanel1.requestFocus();
        }
     
        private void initComponents() {
            jPanel1.setBorder(new TitledBorder("North"));
            jPanel1.setPreferredSize(new Dimension(100, 40));
            jPanel1.addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent evt) {
                    panel1Key(evt);
                }
            });
            getContentPane().add(jPanel1, BorderLayout.NORTH);
     
            jPanel2.setBorder(new TitledBorder("Center"));
            jPanel2.setPreferredSize(new Dimension(100, 100));
            jPanel2.addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent evt) {
                    panel2Key(evt);
                }
            });
     
            jPanel3.setBorder(new TitledBorder("Panel3"));
            jPanel3.setPreferredSize(new Dimension(80, 38));
            jPanel3.addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent evt) {
                    panel3Key(evt);
                }
            });
     
            jPanel2.add(jPanel3);
            getContentPane().add(jPanel2, java.awt.BorderLayout.CENTER);
            pack();
        }
     
        private void panel3Key(KeyEvent evt) {
            System.out.println("in panel3 : " + evt.getKeyCode());
            if (evt.getKeyCode() == KeyEvent.VK_SPACE)
                jPanel1.requestFocus();
        }
     
        private void panel2Key(KeyEvent evt) {
            System.out.println("in panel2 : " + evt.getKeyCode());
            if (evt.getKeyCode() == KeyEvent.VK_SPACE)
                jPanel3.requestFocus();
        }
     
        private void panel1Key(KeyEvent evt) {
            System.out.println("in panel1 : " + evt.getKeyCode());
            if (evt.getKeyCode() == KeyEvent.VK_SPACE)
                jPanel2.requestFocus();
        }
     
        public static void main(String args[]) {
            new Test().show();
        }
     
        private JPanel jPanel1 = new JPanel();
        private JPanel jPanel2 = new JPanel();
        private JPanel jPanel3 = new JPanel();
    }

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Grand merci, ca marche.

    C'etait une probleme de focus donner trop top. Je donnais le focus à mon affichage dans le constructeur du JPanel superieur. Mais maintenant c bon.

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

Discussions similaires

  1. Afficher deux fois le meme Jpanel dans un autre Jpanel
    Par ryu20 dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 06/11/2009, 01h31
  2. JPanel dans un autre JPanel
    Par richard_sraing dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 27/08/2009, 14h12
  3. Réponses: 8
    Dernier message: 30/03/2009, 12h45
  4. Scrollable JPanel dans un autre JPanel
    Par Arcam dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 21/10/2007, 14h54

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