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 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 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
Rejoignez-nous