Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
q1:eventlistener [2017/09/11 07:58] – angelegt admin03 | q1:eventlistener [2017/09/18 08:42] (aktuell) – admin03 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | | ||
+ | |||
+ | Zu diesem Zweck existieren mehrere Listener. Die folgende Liste enthält wohl die wichtigsten Listener die man benötigt um eine grafische Oberfläche zu erstellen. Weitere findet man in der Java API [Jav]: | ||
+ | |||
+ | * ActionListener | ||
+ | * ChangeListener | ||
+ | * ItemListener | ||
+ | * KeyListener | ||
+ | * ListDataListener | ||
+ | * ListSelectionListener | ||
+ | * MouseListener | ||
+ | * MouseMotionListener | ||
+ | * ItemListener | ||
+ | * etc. | ||
+ | |||
+ | Alle diese Listener besitzen verschiedene Funktionen, welche aufgerufen werden, wenn eine bestimmte Benutzereingabe erfolgt. Diese hängen oftmals auch von bestimmten grafischen Elementen ab. So benutzt man beispielsweise den ActionListener um bei JButtons auf Eingaben zu reagieren, ein MouseListener wird hingegen für Mauseingaben verwendet. | ||
+ | |||
+ | Java unterscheidet drei Varianten von KeyEvents, die auch durch statische int-Variablen in der Klasse KeyEvent repräsentiert werden: Wird eine Tastaturtaste betätigt, so wird als erstes ein KEY_PRESSED-Event erzeugt. Beim Lösen der Taste wird dann ein KEY_RELEASED-Event erzeugt. Gehört die gedrückte Taste zu einem Unicode-Charakter, | ||
+ | |||
+ | Der Sinn hinter diesem Verhalten besteht darin, dass etliche Eingaben die Aktivierung mehrerer Tasten benötigen. Wird eine Tastenkombination gedrückt, z.B. im Laufe der Eingabe eines Großbuchstabens, | ||
+ | |||
+ | ====== Ein Beispiel zum Ausprobieren ====== | ||
+ | |||
<code JAVA> | <code JAVA> | ||
import java.awt.event.KeyEvent; | import java.awt.event.KeyEvent; | ||
Zeile 87: | Zeile 110: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | |||
+ | ====== Fliegendes Ufo ====== | ||
+ | ===== Die Klasse UFO ===== | ||
+ | <code JAVA> | ||
+ | |||
+ | import java.awt.*; | ||
+ | import java.awt.event.*; | ||
+ | import javax.swing.*; | ||
+ | |||
+ | import ufo.Zeichenbrett.TastaturEingabe; | ||
+ | |||
+ | |||
+ | public class Ufo extends JFrame{ | ||
+ | Container c; | ||
+ | Zeichenbrett z; | ||
+ | |||
+ | public Ufo(){ | ||
+ | super(" | ||
+ | c = getContentPane(); | ||
+ | z = new Zeichenbrett(); | ||
+ | // ist ne saubere Lösung oder? | ||
+ | z.setFocusable(true); | ||
+ | c.add(z); | ||
+ | setTitle(" | ||
+ | setSize(800, | ||
+ | setVisible(true); | ||
+ | setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | |||
+ | } | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | new Ufo(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Alles spielt sich im Panel ab ==== | ||
+ | |||
+ | <code JAVA> | ||
+ | |||
+ | |||
+ | import java.awt.Graphics; | ||
+ | import java.awt.event.KeyEvent; | ||
+ | import java.awt.event.KeyListener; | ||
+ | import javax.swing.JPanel; | ||
+ | |||
+ | |||
+ | public class Zeichenbrett extends JPanel { | ||
+ | static int x = 100; | ||
+ | static int y = 100; | ||
+ | |||
+ | Zeichenbrett(){ | ||
+ | super(); | ||
+ | this.addKeyListener(new TastaturEingabe()); | ||
+ | } | ||
+ | |||
+ | public void paintComponent(Graphics g) { | ||
+ | super.paintComponent(g); | ||
+ | zeichneUfo(g, | ||
+ | |||
+ | } | ||
+ | |||
+ | void zeichneUfo(Graphics g, int xUfo, int yUfo) | ||
+ | { | ||
+ | g.drawRect(xUfo, | ||
+ | g.drawLine(xUfo+15, | ||
+ | g.drawLine(xUfo+10, | ||
+ | g.drawLine(xUfo+20, | ||
+ | } | ||
+ | |||
+ | class TastaturEingabe implements KeyListener{ | ||
+ | |||
+ | @Override | ||
+ | public void keyPressed(KeyEvent e) { | ||
+ | if (e.getKeyCode() == KeyEvent.VK_RIGHT) | ||
+ | { | ||
+ | x=x+10; | ||
+ | } | ||
+ | if (e.getKeyCode() == KeyEvent.VK_LEFT) | ||
+ | { | ||
+ | x=x-10; | ||
+ | } | ||
+ | if (e.getKeyCode() == KeyEvent.VK_UP) | ||
+ | { | ||
+ | y=y-10; | ||
+ | } | ||
+ | if (e.getKeyCode() == KeyEvent.VK_DOWN) | ||
+ | { | ||
+ | y=y+10; | ||
+ | } | ||
+ | repaint(); | ||
+ | |||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void keyReleased(KeyEvent e) { | ||
+ | // TODO Auto-generated method stub | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void keyTyped(KeyEvent e) { | ||
+ | // TODO Auto-generated method stub | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== UFO mit Graviation ==== | ||
+ | Die Klasse UFO kann weiterhin verwendet werden | ||
+ | |||
+ | <code JAVA> | ||
+ | |||
+ | |||
+ | import java.awt.Graphics; | ||
+ | import java.awt.event.KeyEvent; | ||
+ | import java.awt.event.KeyListener; | ||
+ | import javax.swing.JPanel; | ||
+ | |||
+ | |||
+ | public class Zeichenbrett extends JPanel { | ||
+ | static int x = 100; | ||
+ | static int y = 100; | ||
+ | | ||
+ | public Zeichenbrett(){ | ||
+ | super(); | ||
+ | this.addKeyListener(new TastaturEingabe()); | ||
+ | Thread tr = new Thread(new Gravitation()); | ||
+ | tr.start(); | ||
+ | } | ||
+ | | ||
+ | public void paintComponent(Graphics g) { | ||
+ | super.paintComponent(g); | ||
+ | zeichneUfo(g, | ||
+ | | ||
+ | } | ||
+ | | ||
+ | void zeichneUfo(Graphics g, int xUfo, int yUfo) | ||
+ | { | ||
+ | g.drawRect(xUfo, | ||
+ | g.drawLine(xUfo+15, | ||
+ | g.drawLine(xUfo+10, | ||
+ | g.drawLine(xUfo+20, | ||
+ | } | ||
+ | | ||
+ | class TastaturEingabe implements KeyListener{ | ||
+ | | ||
+ | @Override | ||
+ | public void keyPressed(KeyEvent e) { | ||
+ | if (e.getKeyCode() == KeyEvent.VK_RIGHT) | ||
+ | { | ||
+ | x=x+10; | ||
+ | } | ||
+ | if (e.getKeyCode() == KeyEvent.VK_LEFT) | ||
+ | { | ||
+ | x=x-10; | ||
+ | } | ||
+ | if (e.getKeyCode() == KeyEvent.VK_UP) | ||
+ | { | ||
+ | y=y-10; | ||
+ | } | ||
+ | if (e.getKeyCode() == KeyEvent.VK_DOWN) | ||
+ | { | ||
+ | y=y+10; | ||
+ | } | ||
+ | repaint(); | ||
+ | | ||
+ | } | ||
+ | | ||
+ | @Override | ||
+ | public void keyReleased(KeyEvent e) { | ||
+ | // TODO Auto-generated method stub | ||
+ | } | ||
+ | | ||
+ | @Override | ||
+ | public void keyTyped(KeyEvent e) { | ||
+ | // TODO Auto-generated method stub | ||
+ | } | ||
+ | | ||
+ | } | ||
+ | |||
+ | class Gravitation implements Runnable{ | ||
+ | | ||
+ | | ||
+ | | ||
+ | while(y< | ||
+ | y=y+1; | ||
+ | try{ | ||
+ | Thread.sleep(10); | ||
+ | } | ||
+ | catch(Exception e){ | ||
+ | } | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||