Se disting următoarele evenimente generate la acționarea
tastelor:
- a fost apasată o tastă (KEY_PRESSED);
- a fost eliberată o tastă (KEY_RELEASED);
- a fost "tipărit" un caracter, adică a fost apasată și eliberată o
tastă care transmite un caracter tipăribil (KEY_TYPED).
Aceste situații pot fi detectate cu metodele corespunzătoare ale
interfeței KeyListener.
Evenimentul generat de tastă conține, în afară de codul tastei
acționate, și informații privind starea tastelor auxiliare Ctrl, Alt și
Shift în momentul producerii evenimentului respectiv. Aceste stări pot
fi detectate cu metodele corespunzătoare ale interfeței superclasei java.awt.event.InputEvent.
Exemplu
În fișierul EvTaste.java se dă un
exemplu de aplicație, în care se urmărește apariția unor evenimente de
tastă, care sunt generate de fereastra aplicației, atunci când ea este
activă și se actionează o tastă.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class EvTaste {
static AF af=new AF(); // ascultatorul de
fereastra
static ATaste at=new ATaste(); // ascultatorul
de taste
static IUG iug=new IUG("Urmarirea evenimentelor
de tasta");
/* Clasa imbricata pentru interfata
utilizator */
static class IUG extends JFrame {
/* Constructorul interfetei utilizator */
IUG(String titlu) {
super(titlu);
setSize(300,100);
setLocation(new Point(100,50));
setVisible(true);
addWindowListener(af); // adaugarea
ascultatorului de fereastra
addKeyListener(at); // adaugarea
ascultatorului de taste
}
}
/* Clasa imbricata pentru ascultatorul de
fereastra */
static class AF extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0); // incheierea executarii
aplicatiei
}
}
/* Clasa imbricata pentru ascultatorul de
taste */
static class ATaste implements KeyListener {
public void keyTyped(KeyEvent e) {
System.out.println(e);
}
public void keyPressed(KeyEvent e) {
System.out.println(e);
}
public void keyReleased(KeyEvent e) {
System.out.println(e);
}
}
/* Metoda principala */
public static void main(String args[]) {
}
}
|
Ascultătorul de taste este realizat prin clasa imbricată
ATaste, care implementează interfața KeyListener. Așa cum sunt ele
redefinite aici, metodele ascultătorului de taste afișează evenimentul
respectiv la terminal.
Punând în execuție această aplicație, putem urmări la
terminal succesiunea evenimentelor care sunt generate atunci când
acționam tastele. Remarcăm, de asemenea, că aceste evenimente sunt
generate numai atunci când fereastra aplicației este activă.
|
Pentru a detecta în ce condiții a fost generat evenimentul
(codul tastei care a fost apasată, inscripția de pe tastă, ce taste
auxiliare erau apăsate), putem utiliza metodele claselor KeyEvent și
superclasei acesteia InputEvent.
Exemplu
În fișierul EvTaste1.java este dat un
exemplu de aplicație în care se folosesc metodele din clasele KeyEvent
și InputEvent pentru a detecta situațiile în care au apărut evenimentele
captate de către ascultătorul de taste. Acesta a fost realizat prin
extinderea clasei KeyAdapter.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class EvTaste1 {
static AF af=new AF(); // ascultatorul de
fereastra
static ATaste at=new ATaste(); // ascultatorul
de taste
static IUG iug=new IUG("Urmarirea evenimentelor
de tasta");
/* Clasa imbricata pentru interfata
utilizator */
static class IUG extends JFrame {
/* Constructorul interfetei utilizator */
IUG(String titlu) {
super(titlu);
setSize(300,100);
setLocation(new Point(100,50));
setVisible(true);
addWindowListener(af); // adaugarea
ascultatorului de fereastra
addKeyListener(at); // adaugarea
ascultatorului de taste
}
}
/* Clasa imbricata pentru ascultatorul de
fereastra */
static class AF extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0); // incheierea executarii
aplicatiei
}
}
/* Clasa imbricata pentru ascultatorul de
taste */
static class ATaste extends KeyAdapter {
public void keyPressed(KeyEvent e) {
int cod=e.getKeyCode(), mod=e.getModifiers();
String mesaj="S-a apasat tasta de cod "+cod+"
"+e.getKeyText(cod);
if(mod!=0)
mesaj+=" cu modificatorii:
"+e.getKeyModifiersText(mod);
System.out.println(mesaj);
}
public void keyTyped(KeyEvent e) {
System.out.println("S-a introdus caracterul
"+e.getKeyChar());
}
}
/* Metoda principala */
public static void main(String args[]) {
}
}
|
Punând în execuție această aplicație, putem urmări la
terminal evenimentele de apăsare a unei taste (KEY_PRESSED) și de
introducere a unui caracter (KEY_TYPED) afișate sub formă decodificată.
Pentru detalii privind metodele disponibile în clasele
KeyAdapter, KeyEvent și InputEvent se poate consulta documentația Java
API.
|
|