Problème keyListener lorsque la fenêtre est masquée

soyen -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
J'arrive à afficher "r clicked" uniquement lorsque ma fenêtre est visible, lorsque j'appuie sur masquer (setVisible(false)) alors l'action du keyListener ne fonctionne pas

import javax.swing.*;
import java.awt.*;
import java.io.*;
import javax.swing.event.CaretListener;
import javax.swing.event.CaretEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class IG_Screen extends JFrame implements ActionListener, KeyListener{
 JButton btnCommentaire = new JButton("Masquer");
 public IG_Screen(){
  super("Screen");
  this.setSize(150, 100);
  this.setVisible(true);
  btnCommentaire.addActionListener(this);
  addKeyListener(this);
  btnCommentaire.setBounds(10, 10, 120, 25);
  this.add(btnCommentaire);	
  addWindowListener(new WindowAdapter(){
	public void windowOpened(WindowEvent e) { 
	requestFocus(false);	
	}
  });
 } 
 public void keyPressed(KeyEvent evt){}
 public void keyReleased(KeyEvent evt){} 

 public void keyTyped(KeyEvent evt) {
 if (evt.getKeyChar() == 'r'){
 	 System.out.println("r cliked");
     this.setVisible(true);
 }
}
  
 public void actionPerformed(ActionEvent e) {
  if (e.getSource() == btnCommentaire){
   this.setVisible(false);
   }
 } 
 
 public static void main(String[] args) {
 	JFrame f = new IG_Screen(); 
    f.setLayout(null);
    f.setVisible(true); 
 }
}


d'avance merci pour votre aide
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Un Listener récupère les événements du composant auquel il est ajouté.

Si tu appuies sur une touche lorsque tu es sur un composant c'est les KeyListener de ce composant qui seront appelés, mais aucun cas les Listener des autres composants ne seront appelés.

Si ton composant est masqué, tu ne peux plus interagir avec lui, les événements vont être envoyés à un autre composant : celui qui est resté visible, potentiellement géré par un autre programme.
0