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 :

Problème de Focus


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
    Inscrit en
    Octobre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 39
    Par défaut Problème de Focus
    Voilà donc j'ai un problème tout bête mais tant que ça car ça fait quelques jours que je bloque dessus.

    J'ai une JFrame tout simple qui doit créer un Canvas pour lancer un jeu.

    J'ai simplement un label et un bouton dans ce JFrame, bouton qui crée le Game.

    Lorsque j'arrive dans mon Canvas je n'ai pas le focus et donc le KeyListener ne capte aucun évènement.

    J'ai pourtant dans le construteur de mon Game
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    this.setFocusable(true);
    this.requestFocus();
    Avec ce bout de code j'identifie qui à le focus :
    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
     
     KeyboardFocusManager focusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
                focusManager.addPropertyChangeListener(
                    new PropertyChangeListener() {
                        public void propertyChange(PropertyChangeEvent e) {
                            String properties = e.getPropertyName();
                            if (("focusOwner".equals(properties)) && (e.getNewValue() != null)) {
                                Component component = (Component)e.getNewValue();
                                String name = component.getName();
     
                                System.out.println(name + " a pris le focus");
                            }
                        }
                    }
                );
     
     
                System.out.println(panel.isFocusOwner());
                System.out.println(focusManager.getFocusOwner());
    Et en fait c'est toujours le JFrame précédent, ou le bouton du JFrame.

    J'ai essayé de rendre non focusable JFrame et bouton de la première fenêtre à ce moment là, aucun élément à le focus quand j'arrive dans le Canvas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(focusManager.getFocusOwner());
    Est égal à "null".

    Si quelqu'un à une idée, parce que j'ai tout essayé
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    Je ne sais pas exactement comment tu gère ton jeu car il manque des classes pour pouvoir le tester. Mais j'aurais tendance à te dire, pourquoi utiliser des composants.
    En général, dans un jeu 2D en Swing de type arcade, ce qui est ton cas je crois, on créé ses propres composants (ce qui permet d'obtenir un design sur mesure). Ce qui n'est généralement pas bien compliqué, car c'est souvent juste des boutons. Ces boutons ne sont plus des composants, mais des éléments s'affichant exactement comme des sprites. On fait (ou peux faire) aussi quelquefois plusieurs classes qui gèrent les différents "écrans" du jeu (par exemple le jeu lui-même, un menu, les meilleurs score, une intro, une fin, etc.).
    Du coup le problème du focus se résout on ne peut plus simplement car on a juste une fenêtre et un conteneur dans lequel afficher le jeu. Il suffit alors d'utiliser la méthode setFocusable(boolean), en mettant à false pour la fenêtre et à true pour le conteneur. Le focus sera seulement disponible pour le conteneur.
    Maintenant, il peut y avoir d'autre solution, éventuellement plus adaptées a ton cas...

    Si tu veux plus de précision que cette solution généraliste, alors post plus de détails, avec éventuellement toutes les classes car je ne vois pas trop ce que tu fait des composants graphiques.

    En espérant que cela puisse t'aider...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 39
    Par défaut
    Effectivement j'y avait pensé de faire un menu personnalisé avec des sprites mais c'est pas vraiment l'objectif et ça ne répond pas au problème de gestion des focus en Java c'est plutôt une ruse.

    J'ai résolu mon problème en instanciant ma JFrame sans que aucun élément soit focusable, du coup le Canvas instancié plus tard prend le focus, c'est aussi une ruse je ne comprends pas pourquoi je n'arrive pas à récupérer le focus d'un Jframe à un Canvas.

  4. #4
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Citation Envoyé par sebkill Voir le message
    c'est pas vraiment l'objectif
    Je ne connais pas tes objectifs et contraintes. Je n'ai pas de commentaire à faire.

    Citation Envoyé par sebkill Voir le message
    ça ne répond pas au problème de gestion des focus en Java c'est plutôt une ruse.
    Il n'y a rien de détourné ou de tordu, aucun bidouillage. C'est au contraire la garantie que les évènements claviers seront toujours obtenus. Cela, à mon avis, répond parfaitement à la problématique. C'est simple et fiable.

    Citation Envoyé par sebkill Voir le message
    J'ai résolu mon problème en instanciant ma JFrame sans que aucun élément soit focusable, du coup le Canvas instancié plus tard prend le focus
    Cela revient au même.


    Un jeu vidéo n'est pas une application de gestion. Les composants graphiques sont avant toutes choses destinés à régler les cas de figure les plus fréquemment rencontrés dans la réalisation d'un logiciel de gestion traditionnelle.

    Tu peux aussi utiliser une librairie spécialisée dans la gestion des entrées comme par exemple JInput. C'est adapté au jeu vidéo.

Discussions similaires

  1. Problème de focus avec une TTreeView
    Par Rustine dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/10/2005, 19h12
  2. Problème de Focus
    Par Charette dans le forum Composants VCL
    Réponses: 7
    Dernier message: 15/09/2005, 00h18
  3. problème de focus dans un CEdit
    Par Depteam1 dans le forum MFC
    Réponses: 11
    Dernier message: 08/09/2005, 16h05
  4. [JTextField] Problème de focus
    Par clairette dans le forum Composants
    Réponses: 29
    Dernier message: 22/07/2005, 17h52
  5. Problème de focus + touches de direction
    Par schnito dans le forum Agents de placement/Fenêtres
    Réponses: 9
    Dernier message: 11/01/2005, 21h13

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