GNT sans publicité, site mobile, fonctionnalitées exclusives...

Probleme de focus

Le
SoULiaNe
Bonjour, quand je lance ma classe Tetris (ci-dessous) je n'arrive
pas à donner le focus à mon JPanel game Comment faire ?

Ca marcher avant quand je travaillais sur une applet mais depuis que
j'essaie de la transformer en application, marche plus


import javax.swing.JFrame;

public class Tetris
{
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.show();
frame.resize(800, 600);
frame.validate();

Game game = new Game();
frame.getContentPane().add(game);
game.requestFocus(); // J'essaie les deux
game.requestFocusInWindow(); // mais ca marche pas
}
}

import javax.swing.JPanel;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

class Game extends JPanel implements KeyListener
{
public void keyPressed(KeyEvent e)
{
int key = e.getKeyCode();
System.out.println(key);
}
public void keyReleased(KeyEvent event) {;}
public void keyTyped(KeyEvent event) {;}
}
Lire les 3 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
jocelyn
Le #646894
Salut,

Il me semble que par defaut on ne peut pas donner le focus a un JPanel,
car sa propriete isFocusTraversable() retourne false.
Il faut que tu la surcharges pour qu'elle retourne true.

++

--
Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne
pas devenir un monstre lui-même

"SoULiaNe" c6op4s$dvu$
Bonjour, quand je lance ma classe Tetris (ci-dessous) je n'arrive
pas à donner le focus à mon JPanel game... Comment faire ?

Ca marcher avant quand je travaillais sur une applet mais depuis que
j'essaie de la transformer en application, marche plus...


import javax.swing.JFrame;

public class Tetris
{
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.show();
frame.resize(800, 600);
frame.validate();

Game game = new Game();
frame.getContentPane().add(game);
game.requestFocus(); // J'essaie les deux
game.requestFocusInWindow(); // mais ca marche pas...
}
}

import javax.swing.JPanel;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

class Game extends JPanel implements KeyListener
{
public void keyPressed(KeyEvent e)
{
int key = e.getKeyCode();
System.out.println(key);
}
public void keyReleased(KeyEvent event) {;}
public void keyTyped(KeyEvent event) {;}
}



SoULiaNe
Le #647322
jocelyn wrote:

Il me semble que par defaut on ne peut pas donner le focus a un JPanel,
car sa propriete isFocusTraversable() retourne false.
Il faut que tu la surcharges pour qu'elle retourne true.


Purée ça marche, merci beaucoup !! :))))

(juste pour info, isFocusTraversable() est depreciated et remplacé
par isFocusable(), et au lieu de redéfinir isFocusTraversable() il
suffit de mettre un setFocusable(true) quelque part)


Un JPanel n'est pas focusable par défaut, pourquoi (si la réponse
est simple) ? C'est déconseillé de le rendre focusable ?

En fait je me pose souvent la question "est ce que si je fais
quelque chose qui par défaut ne marche pas comme ca, ou bien qui
n'est pas conseillé, c'est que j'ai mal programmé mon bidule ?"...
vous pensez que je me prend la tete pour rien ou bien c'est
important de se dire ca et il faut le cultiver ?

jocelyn
Le #651914
dsl je travaille en 1.3 moi :)

Je ne pense pas que ce soit une mauvaise chose en soi.
Simplement la plupart du temps les panels n'ont pas besoin d'avoir le focus.
Je pense que chez Sun on a juste fait ca pour éviter des traitements qui
seront
inutiles dans 99% des cas pour les panels.
Ceci dit je pense que c bien de se poser la question :)


--
Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne
pas devenir un monstre lui-même

"SoULiaNe" c6re5p$3ks$
jocelyn wrote:

Il me semble que par defaut on ne peut pas donner le focus a un JPanel,
car sa propriete isFocusTraversable() retourne false.
Il faut que tu la surcharges pour qu'elle retourne true.


Purée ça marche, merci beaucoup !! :))))

(juste pour info, isFocusTraversable() est depreciated et remplacé
par isFocusable(), et au lieu de redéfinir isFocusTraversable() il
suffit de mettre un setFocusable(true) quelque part)


Un JPanel n'est pas focusable par défaut, pourquoi (si la réponse
est simple) ? C'est déconseillé de le rendre focusable ?

En fait je me pose souvent la question "est ce que si je fais
quelque chose qui par défaut ne marche pas comme ca, ou bien qui
n'est pas conseillé, c'est que j'ai mal programmé mon bidule ?"...
vous pensez que je me prend la tete pour rien ou bien c'est
important de se dire ca et il faut le cultiver ?



Publicité
Suivre les réponses
Poster une réponse
Anonyme