IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Evenement KeyPressed inactif


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 62
    Par défaut Evenement KeyPressed inactif
    Bonjour,

    Je viens de rattacher un évènement KeyPressed a ma JFrame mais il ne se lance pas.

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    		this.addKeyListener(new java.awt.event.KeyAdapter() {   
    			public void keyPressed(java.awt.event.KeyEvent e) {
    				if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_Z) {
    					if (!cancel) {
    						Grid tmp = grid;
    						grid = previousGrid;
    						previousGrid = tmp;
    						tmp = null;
    						cancel = true;
    					}else {
    						Toolkit tk = Toolkit.getDefaultToolkit();
    						tk.beep();
    					}
    				}
    				if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_Y) {
    					if (cancel) {
    						Grid tmp = grid;
    						grid = previousGrid;
    						previousGrid = tmp;
    						tmp = null;
    						cancel = false;
    					}else {
    						Toolkit tk = Toolkit.getDefaultToolkit();
    						tk.beep();
    					}
    				}
    				System.out.println("test");
    			}
    		});
    J'ai même vainement essayé par héritage...

    Merci pour vos réponses !

  2. #2
    Membre éclairé

    Profil pro
    Coach Agile
    Inscrit en
    Décembre 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Coach Agile

    Informations forums :
    Inscription : Décembre 2005
    Messages : 316
    Par défaut
    Poste l'ensemble de ta classe

  3. #3
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Un keyevent n'est reçu par un composant que lorsque ce composant a le focus. Pour faire des comportements du style alt+f4 ou ctrl+c (valables sur toute une hiérarchie de composants, e.g. un fenêtre entière), il faut passer par les InputMap.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  4. #4
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 62
    Par défaut
    Ma classe est une simple Jframe. Le code entier serait trop lourd a poster .

    En ce qui concerne l'idée du focus, je pense effectivement ca peut venir de la. Ceci dit, certains evenements comme mouseDraged marchent alors pourquoi pas celui ci ?

    J'ai regardé le InputMap, je vais essayé. M'enfin il n'y aurai pas une solution plus simple ?

  5. #5
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Les MouseEvents sont dirigés vers le composant au dessus duquel est le curseur, mais les KeyEvents sont dirigés vers le composant qui a le focus. Donc si ce n'est pas ta fenêtre qui a le focus, elle ne recevra pas le KeyEvent. C'est pour ça qu'ont été faites les InputMaps, un peu plus compliquées à utiliser, mais c'est normal, vu qu'on leur demande quelque chose de plus complexe.

    Au pire, tu peux passer par un AWTEventListener, mais les InputMaps sont faites pour ça.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  6. #6
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 62
    Par défaut
    Merci pour ton explication !
    J'ai implémenté le InputMap. Tout marche jusqu'a ce que je clique sur un bouton radio par exemple : je perd le focus et ya plus moyen de le recuperer.

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    jContentPane.getInputMap().put(KeyStroke.getKeyStroke("ctrl Z"),"undo");
    jContentPane.getActionMap().put("undo", new AbstractAction() {
    	private static final long serialVersionUID = 1L;
    	public void actionPerformed(ActionEvent e) {
    		if (!cancel) {
    			Color[][] tmp = arrayColors.clone();
    			Color[][] tmp2 = getGrid().getArrayColors().clone();
    			for (int i = 0; i < tmp.length; i++)
    				for (int j = 0; j < tmp[i].length; j++) {
    					tmp2[i][j] = (tmp2[i][j] == null?null:new Color(tmp2[i][j].getRGB()));
    					tmp[i][j] = (tmp[i][j] == null?null:new Color(tmp[i][j].getRGB()));
    				}
    			grid.setArrayColors(tmp);
    			arrayColors = tmp2;
    			grid.repaint();
    			cancel = true;
    		}else
    			Toolkit.getDefaultToolkit().beep();
    	}
    });

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#][1.1] Evénement "keyPress" sur textbox?
    Par gdkenny dans le forum ASP.NET
    Réponses: 4
    Dernier message: 30/03/2006, 12h11
  2. Evenement "onclick" inactif lors du chargement de
    Par Bouillou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 28/03/2006, 12h27
  3. Evenement "onclick" inactif lors du chargement de
    Par Bouillou dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/03/2006, 23h07
  4. [vb.net] evenement Keypress dans un Textbox
    Par arnolem dans le forum Windows Forms
    Réponses: 2
    Dernier message: 04/10/2005, 17h15
  5. Réponses: 1
    Dernier message: 26/09/2005, 19h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo