Froxil
Messages postés8Date d'inscriptionvendredi 24 février 2012StatutMembreDernière intervention15 mars 2012
-
14 mars 2012 à 11:07
Froxil
Messages postés8Date d'inscriptionvendredi 24 février 2012StatutMembreDernière intervention15 mars 2012
-
15 mars 2012 à 11:51
Bonjour,
Afin de connaître les interfaces graphiques dans java, je me suis lancé dans un bête jeu 2D où le joueur doit se servir des flèches directionnelles (ou la souris) pour faire bouger son personnage sur une carte.
Afin d'éviter de relancer le jeu à chaque fin de partie, j'ai décidé d'ajouter un JMenuBar à ma fenêtre principale dans lequel on peut trouver un item "nouvelle partie", un item "options" et un item "règles".
Lorsqu'on clique dessus, tout se passe bien. Seulement, lorsqu'on recommence à jouer, à moins de cliquer dans la partie principale de la fenêtre, on voit la sélection passer sur les différents item du menu (en même temps que le pion bouge sur la carte).
Afin que le pion puisse se déplacer directement après avoir cliqué sur l'item "nouvelle partie", j'utilise la fonction transferFocus() et afin que l'item ne soit plus sélectionné, je fais un setSelected(false). Mais ceci ne change rien au problème ! J'ai essayé avec un removeNotify(), mais dans ce cas, on ne peut faire qu'une seule nouvelle partie, ensuite, ce n'est plus faisable.
Avez vous une idée pour résoudre ceci ?
Je ne sais pas si j'ai été clair sur ce que je veux faire et mes problèmes, si tel n'est pas le cas, veuillez m'en excuser.
Froxil
Messages postés8Date d'inscriptionvendredi 24 février 2012StatutMembreDernière intervention15 mars 20121 15 mars 2012 à 11:51
Bon, j'ai trouvé une astuce pour y arriver, mais vraiment pas propre du tout (du moins, à mon sens) : c'est de redéfinir un nouveau JMenuBar dans lequel je remet mes JMenu (et les désélectionner, bien entendu)...
Si quelqu'un sait comment faire pour éviter cela de manière plus propre, je suis preneur ! Car là, ça va que je n'ai pas beaucoup de JMenu, j'en aurais plus, ce ne serait pas gérable ! ^^
Froxil
Messages postés8Date d'inscriptionvendredi 24 février 2012StatutMembreDernière intervention15 mars 20121 14 mars 2012 à 12:16
Merci pour la rapidité de réponse.
Oui, j'avais oublié : j'avais déjà essayé de faire un requestFocus() sur le composant qui permet de jouer, ce qui devrait revenir au même (à ceci près que c'est moins propre) que le requestFocusInWindow(). Malheureusement, ni l'un ni l'autre ne fonctionne, le problème persiste.
Désolé de ne pas vous montrer les codes, car comme c'est pour essayer l'interface graphique, j'ai codé à l'arrache, mes codes sont limites pas lisible : très peu de commentaires (ce qui n'est pas mon habitude ^^), parfois répétition de code dans différentes fonctions au lieu d'en faire une fonction, etc... J'en ai presque honte !
Froxil
Messages postés8Date d'inscriptionvendredi 24 février 2012StatutMembreDernière intervention15 mars 20121 14 mars 2012 à 20:42
Ça marche à l'ouverture de la fenêtre oui...
Cependant, dans mon cas, ça ne fonctionne pas : lorsque je clique sur "nouvelle partie", seul le JPanel qui contient la "carte du jeu" est actualisé... Si je clique dedans, il n'y a aucun souci, tout se passe bien, seulement, si je ne clique pas dedans, même si mon personnage bouge grâce aux touches directionnelles, on voit les différents item du JMenuBar se sélectionner... :(
Froxil
Messages postés8Date d'inscriptionvendredi 24 février 2012StatutMembreDernière intervention15 mars 20121 14 mars 2012 à 21:18
En affichant "isFocusOwner()" sur la carte, il s'avère qu'elle dispose bien du Focus (et donc le menu ne l'a plus)... Cependant, le problème d'affichage est toujours là : les JMenu se sélectionnent les uns après les autres lorsque j'appuie sur les flèches gauche et droite après avoir cliqué sur le JMenu "Nouvelle Partie", alors qu'avant, non... Donc le problème ne semble pas venir du focus.
Je ne vois pas du tout d'où il vient ! J'ai essayé de désélectionner et de désarmer le JMenu "Nouvelle Partie", rien n'y change... :(
Froxil
Messages postés8Date d'inscriptionvendredi 24 février 2012StatutMembreDernière intervention15 mars 20121 15 mars 2012 à 11:32
J'y avais pensé, mais mis à part mes JMenu (et le JMenuBar), je n'ai aucun composant qui implémentent une interface ou étendent une classe qui permettent d'appeler un doClick()...
Dans tous les cas, ce n'est pas très grave, tout fonctionne en dehors de ça, le mini jeu que j'ai fait est donc opérationnel, il n'y a que ce petit détail graphique qui terni un peu le tout... Le but est donc réussi, apprendre un peu swing ! Mais j'aimerais bien enlever quand ce %#@*$? de bug ! :P