13.3. Ekstra eksempler

Ovenfor har vi brugt MouseListener som illustration. Her vil vi give eksempler på brug af de andre typer lyttere (beskrevet i appendiks senere i kapitlet).

13.3.1. Lytte til musebevægelser

Med MouseMotionListener får man adgang til hændelserne mouseMoved og mouseDragged. Det kan bruges til at tegne grafiske figurer ved at hive musen hen over skærmen.

Her er en applet til at tegne kruseduller. Vi husker punktet, når musen trykkes ned (mousePressed()), og tegner en linje fra forrige punkt til musen, når den trækkes med nedtrykket knap (mouseDragged()).

Tegningen af grafikken sker direkte i håndteringen af hændelsen.

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Kruseduller extends Applet
                         implements MouseListener, MouseMotionListener
{
  public void init()
  {
    this.addMouseListener(this);
    this.addMouseMotionListener(this);
  }

  Point punkt;

  public void mousePressed(MouseEvent hændelse) // kræves af MouseListener
  {
    punkt = hændelse.getPoint();
  }

  public void mouseDragged(MouseEvent hændelse) // kræves af MouseMotionListener
  {
    Point gammeltPunkt = punkt;
    punkt =   hændelse.getPoint();
    Graphics g = getGraphics();
    g.drawLine(gammeltPunkt.x, gammeltPunkt.y, punkt.x, punkt.y);
  }

  public void mouseReleased (MouseEvent hændelse){} // kræves af MouseListener
  public void mouseClicked (MouseEvent event) {}    // kræves af MouseListener
  public void mouseEntered (MouseEvent event) {}    // kræves af MouseListener
  public void mouseExited (MouseEvent event) {}     // kræves af MouseListener
  public void mouseMoved (MouseEvent hændelse) {}// kræves af MouseMotionListener
}

Da vi ikke husker de gamle punkter, kan vi ikke gentegne krusedullen, når systemet kalder paint().

13.3.2. Lytte til en knap

Det vigtigste interface til programmering af grafiske brugergrænseflader er ActionListener med metoden actionPerformed(). Den bruges bl.a. til at lytte til, om knapper bliver trykket på. Her er et eksempel, hvor den tekst, der er valgt med musen i et tekstområde, bliver kopieret til det andet tekstområde, når man trykker på knappen:

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

public class LytTilKnap extends Applet implements ActionListener
{
  private TextArea t1, t2;
  private Button kopierKnap;

  public void init()
  {
    String s = "Her er en tekst.\nMarkér noget af den og tryk Kopier...";
    t1 = new TextArea(s, 5,20);
    add(t1);
    kopierKnap = new Button("Kopiér>>");
    kopierKnap.addActionListener(this);
    add(kopierKnap);
    t2 = new TextArea( 5,20);
    t2.setEditable(false);
    add(t2);
  }

  public void actionPerformed(ActionEvent e)   // kræves af ActionListener
  {
    t2.setText(t1.getSelectedText() );
  }
}

Læg mærke til, at vi registrerer lytteren (som er applet-objektet selv) hos knappen.