Implementare un KeyListener in java Swing

di  Antonio Coschignano, giovedě 20 settembre 2012

Nell'articolo La gestione degli eventi in java Swing abbiamo visto come in un ambiente Swing è possibile gestire i diversi eventi in un'interfaccia grafica. In questo tips approfondiamo l'argomento per quanto riguarda gli eventi generati dalla pressione di un tasto. Il tutto viene gestito dall'implementazione dell'interfaccia KeyListener che non è altro che 'un ascoltatore' dei pulsanti che interagiscono con l'interfaccia grafica. Vediamo quali sono i metodi da implementare in un KeyListener:

  • public void keyTyped(KeyEvent e): questo metodo viene richiamato quando il tasto è stato digitato
  • public void keyPressed(KeyEvent e): questo metodo viene richiamato quando il tasto è stato premuto
  • public void keyReleased(KeyEvent e): questo metodo viene richiamato quando il tasto è stato rilasciato

Per registrare un KeyListener in un componente, bisogna utilizzare questo metodo:

public void addKeyListener(KeyListener listener)

Questo metodo è presente in tutti i componenti grafici in quanto è erediatato dalla superclasse Component di java.awt. Il KeyEvent è un'oggetto che porta con se molte informazioni che riguardano il tasto premuto/rilasciato, tipo il carattere del tasto (getKeyChar()), il codice (getKeyCode()) etc.. Vediamo adesso un'implementazione di KeyListener in una semplice applicazione grafica:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class KeyListenerDemo extends JPanel implements KeyListener {

    private JTextArea textArea;

    public KeyListenerDemo() {
        super(new BorderLayout());
        textArea = new JTextArea(20, 40);
        JTextField textField = new JTextField();
        JButton cancella = new JButton("Cancella");
        super.add(textField, BorderLayout.NORTH);
        super.add(new JScrollPane(textArea), BorderLayout.CENTER);
        super.add(cancella, BorderLayout.SOUTH);
        textField.addKeyListener(this);


        cancella.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                textArea.setText("");
            }
        });
    }
	
    public void keyTyped(KeyEvent e) {
        textArea.append("KEYTYPED -> KeyChar : " + e.getKeyChar() +
                        "  KeyCode : " + e.getKeyCode() + "\n");
    }

    public void keyPressed(KeyEvent e) {
        textArea.append("KEYPRESSED -> KeyChar : " + e.getKeyChar() +
                        "  KeyCode : " + e.getKeyCode() + "\n");
    }

    public void keyReleased(KeyEvent e) {
        textArea.append("KEYRELEASED -> KeyChar : " + e.getKeyChar() +
                        "  KeyCode : " + e.getKeyCode() + "\n");
    }
	
    public static void main(String[] args) {
        JFrame frame = new JFrame("KeyListener Demo");
        frame.getContentPane().add(new KeyListenerDemo());
        frame.pack();
        frame.setVisible(true);
    }
}

Ho evidenziato in grassetto le parti importanti del codice. In questo esempio viene installato il KeyListener in un campo di testo (JTextField) dove alcune informazioni dei tasti digitati vengono loggati nella JTextArea, che stampa informazioni riguardante il carattere del tasto ed il keyCode. Ecco il risultato:

Esempio ListView ArrayAdapter

Altri link che potrebbero interessarti
  • » Utilizzare un JButton in Java Swing
  • » Utilizzare HTML in componenti Java Swing
  • » Numeri casuali in java
  • » Modalità Full Screen Exclusive in java
  • » Leggere un file di testo in java
  • » Le variabili atomiche in java
  • » Le classi anonime
  • » Java Regex
  • » Java Database MySql
  • » Java Cursor Mouse
  • » Import Static Java
  • » Implementare un Singleton
  • » Implementare il System.out su una JTextArea
  • » Il costrutto if in java
  • » Il costrutto foreach in java
  • » Il blocco static
  • » Creare una ToolBar in Java Swing
  • » Chiudere le applicazioni Java Swing
  • » Bordo con titolo in Java Swing
  • » Background Image per componenti Java Swing