q1:eventlistener

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
q1:eventlistener [2017/09/11 07:58] – angelegt admin03q1:eventlistener [2017/09/18 08:42] (aktuell) admin03
Zeile 1: Zeile 1:
 + Listener dienen zur Kommunikation zwischen dem Benutzer eines Programms und dem Programm selbst. Wenn ein Benutzer mit einem grafischen Element, beispielsweise einem JButton oder einer JList, interagiert, werden bestimmte Methoden ausgeführt. Diese Methoden kann der Programmierer überschreiben und somit seine eigenen Aktionen programmieren, welche bei einem Klick auf einen JButton o.ä. ausgeführt werden.
 +
 +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, so wird zusätzlich ein KEY_TYPED-Event generiert. Gelegentlich ist hierzu auch noch ein KEY_RELEASED-Event notwendig. Das Aktivieren einer Taste, die keinem Unicode-Character zuzuordnen ist, erzeugt zwar KEY_PRESSED- und KEY_RELEASED-Events, jedoch kein KEY_TYPED-Event.
 +
 +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, so wird für jede Taste, die Shift- und die Buchstabentaste, je ein KEY_PRESSED- und ein KEY_RELEASED-Event erzeugt. Beide KEY_PRESSED-Events werden dann auf ein KEY_TYPED-Event übertragen, sodass dies für ein Zeichen nur einmal gesendet wird.
 +
 +====== Ein Beispiel zum Ausprobieren ======
 +
 <code JAVA> <code JAVA>
 import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
Zeile 87: Zeile 110:
 } }
 </code> </code>
 +
 +
 +====== 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("Ufo");
 + c = getContentPane();      
 + z = new Zeichenbrett(); //Alles was passiert, passiert im Zeichenbrett, 
 +     // ist ne saubere Lösung oder?  
 + z.setFocusable(true);
 + c.add(z);
 + setTitle("Ufo");
 + setSize(800,600);
 + setVisible(true);
 + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 +  
 + }
 +   
 +   public static void main(String[] args) {
 +   new Ufo();
 +   }
 + }
 +
 +</code>
 +
 +==== 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, x, y);
 +
 + }
 +
 + void zeichneUfo(Graphics g, int xUfo, int yUfo)
 + {
 + g.drawRect(xUfo,yUfo,30,15);
 + g.drawLine(xUfo+15,yUfo-10,xUfo+15,yUfo);
 + g.drawLine(xUfo+10,yUfo+15,xUfo+5,yUfo+25);
 + g.drawLine(xUfo+20,yUfo+15,xUfo+25,yUfo+25);
 + }
 +
 + 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
 + }
 +
 + }
 +
 +}
 +
 +</code>
 +
 +==== 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, x, y);
 +    
 +  } 
 +  
 +  void zeichneUfo(Graphics g, int xUfo, int yUfo)
 +  {
 +      g.drawRect(xUfo,yUfo,30,15);
 +      g.drawLine(xUfo+15,yUfo-10,xUfo+15,yUfo);
 +      g.drawLine(xUfo+10,yUfo+15,xUfo+5,yUfo+25);
 +      g.drawLine(xUfo+20,yUfo+15,xUfo+25,yUfo+25);
 +  }
 +  
 +  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{
 +    
 +     @Override
 +     public void run(){
 +            while(y<1000){
 +              y=y+1;
 +              try{
 +                  Thread.sleep(10);
 +                 }
 +              catch(Exception e){
 +                 }
 +               repaint();  
 +              }
 +       }
 +     }
 +
 +}
 +</code>
 +
 +
  
  • /var/www/infowiki/data/attic/q1/eventlistener.1505116712.txt.gz
  • Zuletzt geändert: 2017/09/11 07:58
  • von admin03