Détecter une frappe au clavier

cs_Basile238
Messages postés
3
Date d'inscription
mardi 30 octobre 2007
Statut
Membre
Dernière intervention
14 octobre 2008
- 30 oct. 2007 à 21:20
cs_naincus
Messages postés
14
Date d'inscription
dimanche 3 novembre 2002
Statut
Membre
Dernière intervention
25 juin 2009
- 16 oct. 2008 à 14:44
Bonjour,

je vous contacte avant d'appeler l'hôpital pour qu'on m'interne.
Sérieusement: depuis 2 jours je cherche simplement à déclencher une action sur une frappe du clavier. Peu importe la touche!

N'y parvenant pas, j'essaye en ce moment de faire une chose très simple: une application qui émet un bip dès qu'on frappe sur une touche du clavier.

Je sais comment faire un bip: Toolkit.getDefaultToolkit().beep()

Malgré tous mes efforts avec ces foutus KeyListener, KeyAdaptor, Component et que sais-je encore, c'est un échec ahurissant.

Je vous en prie: aidez-moi avant que je m'en prenne à mon mobilier.

5 réponses

Twinuts
Messages postés
5372
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
111
31 oct. 2007 à 12:11
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8" />
<title>
</title>
<meta name="GENERATOR" content="OpenOffice.org 2.3 (Linux)" />
<style type="text/css">
<!--
@page { size: 21cm 29.7cm; margin: 2cm }
P { margin-bottom: 0.21cm }
-->
</style>
Salut,

si ton composant contient
d'autres composants et que tu veux que l'action soit faite n'importe
où dans la fenêtre, il te faut utiliser la méthode
registerKeyboardAction héritée de JComponent (de
préférence tu l'attaches au container principal)

dans
l'exemple ci-dessous il suffit de faire ALT+ENTER, CTRL+C ou CTRL+V
pour afficher un message :



import java.awt.Event;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

public class Test extends JPanel implements ActionListener {
    private static final long    serialVersionUID    = -4312447806272150211L;

    // constantes pour simplifier l'utilisation des commandes
    private static final String    ALT_ENTER            = "ALT+ENTER";
    private static final String    CTRL_C                = "CTRL+C";
    private static final String    CTRL_V                = "CTRL+V";

    public Test() {
        registerKeyboardAction(this, ALT_ENTER, KeyStroke.getKeyStroke(
                KeyEvent.VK_ENTER, Event.ALT_MASK),
                JComponent.WHEN_IN_FOCUSED_WINDOW);
        registerKeyboardAction(this, CTRL_C, KeyStroke.getKeyStroke(
                KeyEvent.VK_C, Event.CTRL_MASK),
                JComponent.WHEN_IN_FOCUSED_WINDOW);
        registerKeyboardAction(this, CTRL_V, KeyStroke.getKeyStroke(
                KeyEvent.VK_V, Event.CTRL_MASK),
                JComponent.WHEN_IN_FOCUSED_WINDOW);

        // création de quelques composants pour le fun
        for (int i = 1; i < 51; ++i)
            add(new JButton("Button " + i));
    }

    /**
     * pour le test
     */
    public static void main(String[] args) {
        final JFrame f = new JFrame("Test registerKeyboardAction");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(800, 600);
        f.setLocationRelativeTo(null);
        f.setContentPane(new Test());
        f.setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(this)) {// pour le cas ou il y ai d'autres
                                            // composants
            // gestion de l'action
            String msg = "";
            if (e.getActionCommand().equals(ALT_ENTER))
                msg = ALT_ENTER;
            else if (e.getActionCommand().equals(CTRL_C))
                msg = CTRL_C;
            else if (e.getActionCommand().equals(CTRL_V))
                msg = CTRL_V;
            JOptionPane.showMessageDialog(this, msg + " pressed", "Info",
                    JOptionPane.INFORMATION_MESSAGE);
        }
    }
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0