Lehrer Nussbaumer - JAVA (eine kleine Einführung ;)

Grundlagen

GUI

Eingabe

Ausgabe

Applikationen

Applets

  1. CheckBoxes
  2. Events
  3. Menüs
  4. Langton-Ameise
  5. Turmiten
  6. Fraktale
  7. Zelluläre Automaten
  8. Fraktales Wachstum
  9. Logistisches Wachstum
  10. Feigenbaum Diagramm
  11. Sortieralgorithmen
  12. Lorenz-Plot

Servlets

Beispiele

Spiele

IDEs

Skriptum

JAVA-DOCS


-----------------
letzte Änderung:
09 December 2021
-----------------
Lehrer Nussbaumers Seite

... in Arbeit ...

Ereignisse abfragen

Ereigneisse sind entweder mit bestimmten Eingaben wie Tastaturklicks (KeyEvents) und Mausbewegungen und -aktionen (MouseEvents) oder mit bestimmten GUI-Objekten wie Schaltflächen, Checkboxes, etc. verbunden. Jedes JAVA-Applet kann auf solche Ereignisse reagieren, wenn so genannte Listener implementiert sind. Diese sind Schnittstellen, die mit einem auslösenden Objekt verbunden sind: Sobald das Ereignis eintritt, reagiert der Listener, indem er eine entsprechende Methode aufruft...

Adapterklassen

Adapterklassen (vgl. auch Einführung zu Applikationen) implementieren "leere" Methoden - erst der Anwender erweitert die Adapterklasse mit den notwendigen Funktionen. Folgende Adapterklassen werden beispielsweise häufig verwendet:

  • java.awt.event.WindowAdapter - Methoden zum Öffnen, Verkleinern, ... Schließen von Fenstern, vgl. Klasse "WindowListener"
  • java.awt.event.KeyAdapter - Methoden für Tastaturereignisse, vgl. Klasse "KeyListener"
  • java.awt.event.MouseAdapter - Methoden für verschiedene Maus-Klicks, vgl. Klasse "MouseListener"
  • java.awt.event.MouseMotionAdapter - Methoden für Maus-Bewegungen, vgl. Klasse "MouseMotionListener"
  • u.a.m.

Adapterklassen werden dabei sinnvoll innerhalb einer init()-Methode oder innerhalb der main()-Methode als "anonyme Klasse" implementiert:

public static void main (String [] args) {
  DragIt proggi = neew DragIt();
  WindowListener wl = new WindowAdapter () {
    public void windowClosing(WindowEvent we) {
      System.exit(0);
    }
  };
  proggi.addWindowListener(wl);
  proggi.setSize(300,300);
  proggi.setLocateion(100,100);
  proggi.setVisible(true);
}

Mit der addWindowListener() - Funktion könnte der Listener direkt erzeugt und der aufrufenden Klasse hinzugefügt werden:

proggi.addWindowListener(new WindowAdapter() {
  public void windowClosing(WindowEvent we) {
    System.exit(0);
  }
});

Achtung: Mit der eben vorgestellten Technik entsteht sehr kompakter Code; bei umfangreicheren Projekten leidet aber die Übersichtlichkeit!

Zum Anfang zurück

KeyEvents

Im Wesentlichen reagieren wir auf den Druck auf eine bestimmte Taste und fangen dieses Ereignis mit der keyPressed()-Methode ab:

    public void init() {
        this.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(KeyEvent ke) {
                taste_gedrueckt(ke);
            }
        });
    }

Die Methode taste_gedrueckt(KeyEvent ke) nimmt anschließend den KeyEvent entgegen und reagiert entsprechend:

    public void taste_gedrueckt(KeyEvent e) {
        switch (e.getKeyCode()) {
            case 37:
                xpos--;
                break;
            case 38:
                ypos--;
                break;
            case 39:
                xpos++;
                break;
            case 40:
                ypos++;
                break;
            case 32:
                bombe();
                break;
            default:
        }
        tu_etwas();
        repaint();
    }

Hinweise: Beachte die "Spiele" auf dieser Seite!

Zum Anfang zurück

MouseEvents

In folgendem Beispiel sollen mit der Maus Rechtecke auf einer Zeichenfläche "aufgezogen" werden können: Mit einem Klick mit der linken Maustaste werden die Koordinaten der linken oberen Ecke des Rechtecks fixiert, beim Ziehen mit gedrückter Maustaste wird das Rechteck aufgezogen und beim Loslassen schließlich gezeichnet:

Wir behandeln hier zwei verschiedene Adapterklassen: MouseAdapter und MouseMotionAdapter. Wie bei einem Applet üblich, binden wir sie in der init()-Methode ein. Für die MouseAdapter-Klasse überschreiben wir die Methoden mousePressed(MouseEvent me) und mouseReleased(MouseEvent me):

import java.awt.Graphics;
import java.awt.Color;
import java.applet.*;
import java.awt.event.*;

public class grafik extends Applet {

    int punktelio[][] = new int [40][2];
    int punktereu[][] = new int [40][2];
    int punkteint[][] = new int [1][2];
    int zaehler = 0;
    boolean dragged = false;

    // drei Mouse-Aktionen: Drücken, Ziehen, Loslassen ;-))

    public void init() {
        this.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent me) {
                setze(me);
            }
            public void mouseReleased(MouseEvent me) {
                loese(me);
            }
        });
        this.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseDragged(MouseEvent me) {
                ziehe(me);
            }
        });
    }

    public void setze(MouseEvent me) {
        if (zaehler < 40) {
            punktelio[zaehler][0] = me.getX();
            punktelio[zaehler][1] = me.getY();
        }
    }

    public void ziehe(MouseEvent me) {
        if (zaehler < 40) {
            punkteint[0][0] = me.getX();
            punkteint[0][1] = me.getY();
            dragged = true;
            repaint();
        }
    }

    public void loese(MouseEvent me) {
        if (zaehler < 40) {
            punktereu[zaehler][0] = me.getX();
            punktereu[zaehler][1] = me.getY();
            zaehler++;
            repaint();
        }
    }

    public void paint (Graphics bs) {
        if (zaehler <= 40) {
            bs.setColor(Color.white);
            bs.fillRect(0,0, 400, 400);
            bs.setColor(Color.blue);
            for (int i=0; i<zaehler; i++) {
                int breite = punktereu[i][0] - punktelio[i][0];
                int hoehe = punktereu[i][1] - punktelio[i][1];
                bs.drawRect(punktelio[i][0], punktelio[i][1], breite, hoehe);
            }
        }
        if (dragged) {
            bs.setColor(Color.green);
            int breited = Math.abs(punkteint[0][0] - punktelio[zaehler][0]);
            int hoehed = Math.abs(punkteint[0][1] - punktelio[zaehler][1]);
            bs.drawRect(punktelio[zaehler][0], punktelio[zaehler][1], breited, hoehed);
            dragged = false;
        }
        bs.setColor(Color.red);
        bs.drawString(zaehler + " Rechtecke gezeichnet", 10, 430);
        if (zaehler==40) bs.drawString("und aus! (Speicher voll)", 200, 430);
    }
}

Kommentar:

Die drei Methoden setze(), ziehe() und loese() beschreiben, wie die Koordinaten des Rechteckes in die jeweiligen Arrays übernommen werden. Das Flag "dragged" dient dazu, die Zeichenaktionen in der paint()-Methode zu unterscheiden. Erst wenn die Maustaste ausgelassen wurde, werden die endgültigen Koordinaten des rechten, unteren Eckpunktes gespeichert und der Zähler counter inkrementiert.

Zum Anfang zurück

Aufgaben

  • Erweitere das Applet so, dass du verschiedene Grafik-Objekte zeichnen kannst! Die Grafikobjekte sollen entweder
    • durch Tastatur-Klick
    • mit Hilfe von Radio-Buttons, Schaltflächen oder Auswahl-Listen
    • über ein Menü
    ausgewählt werden.
  • Übertrage die Applets auf Applikationen!

© Alfred Nussbaumer, Weblog "MiniNuss"