Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme de focus

3 réponses
Avatar
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) {;}
}

3 réponses

Avatar
jocelyn
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" a écrit dans le message news:
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) {;}
}



Avatar
SoULiaNe
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 ?

Avatar
jocelyn
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" a écrit dans le message news:
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 ?