Problème de focus

Problème de focus - Java - Programmation

Marsh Posté le 28-04-2004 à 19:15:23    

Bonjour, quand je lance ma classe Tetris (ci-dessous) je n'arrive pas à donner le focus à mon JPanel game... Comment faire ?
 
Ca marchait 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) {;}
}

Reply

Marsh Posté le 28-04-2004 à 19:15:23   

Reply

Marsh Posté le 30-04-2004 à 22:55:52    

je crois que tu le fait dans le désordre:
 
tu ajoute tes composants ENSUITE tu affiche ta frame ;)
une fois affiché fait appel game.requestFocus();  
normalement ca doit etre bon

Reply

Marsh Posté le 30-04-2004 à 23:27:01    

On m'a dit qu'il fallait mettre un setFocusable() quelque part car par défaut les JPanel ne peuvent pas prendre le focus. J'ai fait comme ça et ça a marché, mais merci tout de même pour ta réponse :)

Reply

Marsh Posté le 04-08-2004 à 01:18:30    

Moi j'ai un autre problème de focus avec les boites de dialogues modale que je ne comprends pas.
Voici le code de Test que j'ai :

Code :
  1. import javax.swing.JFrame;
  2. import javax.swing.JDialog;
  3. import javax.swing.JButton;
  4. import java.awt.event.ActionListener;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.FlowLayout;
  7. public class Test extends JFrame implements ActionListener
  8. {
  9.   private JDialog jd;
  10.   public Test()
  11.   {
  12.     super ("test" );
  13.     setBounds(200, 100, 500, 500);
  14.     setVisible(true);
  15.     jd = new JDialog (this, true);
  16.     jd.getContentPane ().setLayout(new FlowLayout ());
  17.     JButton but = new JButton ("OK" );
  18.     but.addActionListener(this);
  19.     jd.getContentPane().add(but);
  20.     JButton but2 = new JButton ("Annuler" );
  21.     but2.addActionListener(this);
  22.     jd.getContentPane().add(but2);
  23.     jd.setBounds(200, 100, 400, 400);
  24.     but2.setFocusable(true);
  25.     jd.setVisible(true);
  26.     //jd.show ();
  27.     if (but2.requestFocusInWindow())
  28.       System.out.println("Request possible" );
  29.     else
  30.       System.out.println("Request impossible" );
  31.     //jd.setModal(true);  
  32.   }
  33.  
  34.   public void actionPerformed(ActionEvent e)
  35.   {
  36.     System.out.println("action performed" );
  37.     jd.dispose();
  38.   }
  39.   public static void main(String[] args)
  40.   {
  41.     Test test1 = new Test();
  42.   }
  43. }


 
Le but de cette classe et de mettre le focus sur le bouton Annuler.
Pour pouvoir mettre le focus sur un composant il faut que celui si soit visible, c'est pourquoi le code pour mettre le bouton Annuler est après la ligne jd.setVisible (true). Le problème c'est que si on fait ca sur une boite de dialogue modale, tout ce qui suit est bloqué tant qu'on a pas fait appel à dispose () ou hide ()... La ligne qui affiche soit request possible ou request impossible s'affiche qu'apres l'appel à action perfermed...
Donc comment faire pour afficher la boite de dialogue modale pour mettre le focus sur le bouton Annuler ??????
J'ai essayé de créer une boite non modale, de la mettre visible, de mettre le focus sur le bon bouton et apres faire appel à setModal (), mais la boite de dialogue reste non modale...
J'ai essayé plusieurs choses, je n'ai pas trouvé de solution, quelqu'un peut m'aider ???
 
Merci

Reply

Marsh Posté le 08-08-2004 à 18:52:45    

Pas de suggestion ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed