AWT-Ereignisse

Willemers Informatik-Ecke

Ereignisse

Mausereignisse

import java.awt.event.*;

public class MausEvent extends Applet implements MouseListener {
int x, y;

  public void init() {
    this.addMouseListener(this);
  }
  // die Mitglieder der MouseListener-Schnittstelle
  public void mouseClicked(MouseEvent me) {
    x = me.getX(); y = me.getY();
  }
  public void mouseReleased(MouseEvent me) { }
  public void mousePressed(MouseEvent me) { }
  public void mouseEntered(MouseEvent me) { }
  public void mouseExited(MouseEvent me) { }
}

In der init-Funktion wird der MouseListener auf diese Klasse "scharfgemacht" (this.add ...) und die Behandlung auf die eigene Klasse gelenkt (..Listener(this)). Die eigene Klasse wird zwar von Applet abgeleitet, implementiert aber die Schnittstelle (interface) des MouseListener. Das bedeutet, daß jede Funktion implementiert werden muß, selbst wenn sie nicht im Programm benötigt wird.

Tastaturereignisse

Wenn ein Programm auf Tastaturereignisse reagieren will, implementiert es das Interface KeyListener. Dazu müssen die Methoden keyPressed, keyTyped und keyReleased implementiert werden. Ausserdem muss einmal addKeyListener aufgerufen werden, damit die Ereignisse ankommen.

In keyPressed werden auch Sondertasten gefangen. Mit getKeyCode kann der Tastencode bestimmt werden.

public class dummy extends Applet implements KeyListener
{
    public void init() 
    {
        addKeyListener(this);
    }
    
    // ------------ Hier wird der KeyListener implementiert ---------
    // KeyPressed reagiert auch auf Sondertasten
    public void keyPressed(KeyEvent e)
    {
        int k = e.getKeyCode();
        if (k==KeyEvent.VK_UP) {
            // Cursortaste oben
        }
        if (k==KeyEvent.VK_DOWN) { 
            // Cursortaste unten
        }
        if (k==KeyEvent.VK_LEFT) ...
        if (k==KeyEvent.VK_RIGHT) ...
    } // keyPressed
    
    public void keyTyped(KeyEvent e) {}
    public void keyReleased(KeyEvent e) {}
    // ------------ Ende der Implementierung des KeyListeners

Beispielprogramm

Das Beispielprogramm erscheint als eigenständige Applikation mit einem "handelsüblichen" Menü, das allerdings nur den Menüpunkt Datei - Ende kennt.

Die Ereignislogik hat sich von Java 1.0 nach 1.1 verändert. Wie im restlichen Text ist hier die Variante für 1.1 verwendet.

Unter dem Namen MiniMenu.java die erste Datei:

import java.awt.*;

public class MiniMenu extends Object
{
	public static void main(String[] args)
	{
		Frame myFrame = new Frame("Erstes Frame");
		MenuBar myMenuBar = new MenuBar();
		myFrame.setMenuBar(myMenuBar);
		Menu fileMenu = new Menu("Datei");
		myMenuBar.add(fileMenu);
		MenuItem EndeItem = new MenuItem("Ende");
		HndlMenu MenuHandler = new HndlMenu(EndeItem);
		EndeItem.addActionListener(MenuHandler);
		fileMenu.add(EndeItem);
		
		myFrame.resize(300, 200);
		myFrame.show();
	}
}

MiniMenu erweitert Object, nicht Applet! Der Start liegt damit nicht in der Funktion init, sondern main. Es wird ein Frame angelegt, der einen Menübaum zugeordnet bekommt. Im Gegensatz zu Windows oder MacOS verwendet AWT das direkte Aufbauen von Menüs wie man es von den Widget-Sets von X-Window kennt.

Bevor das EndeItem dem Baum hinzugefügt wird, wird der Eventhandler, hier HndlMenu angebunden. Durch resize und vor allem show erscheint das Programm mit dem Menübaum auf dem Bildschirm.

Der Eventhandler unter der Datei HndlMenu.java:

import java.awt.*;
import java.awt.event.*;

public class HndlMenu implements ActionListener 
{
	MenuItem thisItem;
	HndlMenu(MenuItem callItem)
	{
		thisItem = callItem;
	}
	// hier wird auf das Ereignis reagiert
	public void actionPerformed(ActionEvent evnt)
	{
		if (thisItem.getLabel()=="Ende") {
			System.exit(0);
		}
	}
}

Über den Konstruktor wird das Element notiert, das den Eventhandler benutzt. Bei Eintreffen des Events wird die Funktion actionPerformed gerufen. Hier wird dann durch Aufruf von System.exit die Anwendung geschlossen.


Literatur

Schulz, Paul: Java 1.1: schnell und sicher zum Ziel. Markt & Technik, 1997.
Diehl, Stephan: Java & Co. Addison Wesley, 1997.


Homepage - Java (C) Copyright 2011 Arnold Willemer