|
Zdarzenia klawiatury
Do obsługi zdarzeń generowanych przez klawiaturę implementujemy interfejs KeyListener z pakietu java.awt.event.*.
Interfejs ten wymusza dodanie następujących metod:
- public void keyPressed(KeyEvent e)
Reaguje na naciśnięcie klawisza.
- public void keyReleased(KeyEvent e)
Reaguje na zwolnienie klawisza.
- public void keyTyped(KeyEvent e)
Reaguje gdy wciśnięty klawisz (albo klawisze) spowodują wygenerowanie jakiegoś znaku.
Wszystkie te metody przyjmują jako argument klasę KeyEvent
Oto jej ważniejsze metody:
- char getKeyChar( )
Zwraca znak klawisza, który wygenerował akcję.
- int getKeyCode( )
Zwraca identyfikator klawisza, który wygenerował akcję.
Wartości te odpowiadają różnym stałym zaczynającym się od VK_, np. VK_1, VK_A, VK_ENTER.
Aby zarejestrować klasę nasłuchującą zdarzenie należy wywołać metodę addKeyListener, jako parametr podając klasę implementującą to zdarzenie.
Musimy także wywołać metodę requestFocus( ).
A teraz jakiś przykład.
Napiszemy aplet który będzie mierzył naszą szybkość pisania na klawiaturze.
[Uruchom aplet]
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Klawiatura extends Applet
implements KeyListener
{
private int stan = 1;
private String teksty[ ] = {
"\nW hackingu nie możliwe są tylko 2 rzeczy: polubić XP-ka i nakarmić mysz serem.",
"\nSztuczna inteligencja lepsza jest od naturalnej głupoty.",
"\nLudzie dzielą się na 10 grupy, na tych co rozumieją kod dwójkowy i na tych co go nie rozumieją.",
"\nPrawdziwy informatyk wiesza się razem ze swoim programem.",
"\nKomputer służy do tego, aby ułatwić ci pracę, której bez niego w ogóle byś nie miał."
};
private int nr_tekstu, max=4;
private String tekst = new String( );
private Date data1, data2;
private int policz( )
{
long liter = 0;
for (String str : teksty)
{
}
data2 = new Date( );
return (int)(liter/(((float)(data2.getTime( )-data1.getTime( ))/1000)/60));
}
public void init( )
{
addKeyListener(this);
requestFocus( );
setBackground(Color.black);
}
public void paint(Graphics g)
{
g.setColor(Color.white);
switch(stan)
{
case 1:
g.drawString("Program do mierzenia szybkości pisania na klawiaturze", 10, 20);
g.drawString("Aby rozpocząć wciśnij ENTER", 10, 40);
break;
case 2:
g.drawString(teksty[nr_tekstu], 10, 20);
g.setColor(Color.orange);
g.drawString(tekst, 10, 40);
break;
case 3:
g.drawString("Koniec gry " , 10, 20);
g.drawString("Twój wynik to: " + policz( ) + " znaków na minutę.", 10, 40);
g.drawString("Jeśli chcesz spróbować jeszcze raz wciśnij ENTER." , 10, 60);
break;
}
}
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode( ) == e.VK_ENTER)
{
switch(stan)
{
case 1:
nr_tekstu = 0;
stan=2;
data1 = new Date( );
break;
case 2:
if(tekst.equals(teksty[nr_tekstu]) == true)
{
if(nr_tekstu==max) stan=3;
nr_tekstu++;
}
else
{
Graphics g = getGraphics( );
g.setColor(Color.white);
g.drawString("Źle, popraw się!", 500, 60);
try
{
}
catch (InterruptedException ex){ }
}
tekst = new String( );
break;
case 3:
stan = 1;
break;
}
repaint( );
}
}
public void keyTyped(KeyEvent e)
{
if(stan==2)
{
if(e.getKeyChar( ) == '\b')
tekst = tekst.substring(0, tekst.length( )-1); else tekst = tekst + e.getKeyChar( );
repaint( );
}
}
public void keyReleased(KeyEvent e) { }
}
Oczywiście do wpisywania tekstu można użyć gotowych kontrolek, ale o nich napiszę innym razem.
>Kliknij tutaj by skomentować, zgłosić błąd, lub uzupełnić tą część kursu.<
|
|