Strona Główna | Kurs Javy | Galeria Apletów | Algorytmy | CodeGenerator | Państwa, miasta(gra) | Forum

INNE DZIAŁY
Co to jest java?

KURS
Dla początkujących

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)
      {
        liter += str.length( );
      }
      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
            {
              Thread.sleep(2000);
            } 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) { }
}
Kod wygenerowany za pomocą programu: Code Generator
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.<




statystyki www stat.pl
Wszystkie prawa zastrzeżone. Created by MarioX