next up previous contents
Nächste Seite: Funktionsgraphen darstellen Aufwärts: AWT / Swing Vorherige Seite: Mausereignisse - ``Punkte malen''   Inhalt

Rechtecke ``aufziehen''

Im folgenden Beispiel soll während des Ziehens mit der Maus das geplante Rechteck dargestellt werden. Dazu verwenden wir die Methode mouseDragged(). Sobald die Maustaste ausgelassen wird, wird das Rechteck mit Hilfe der Methode mouseReleased() gezeichnet. Beachte, welche Methoden repaint() aufrufen!

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


public class DragIt extends java.awt.Frame 
    implements MouseListener, MouseMotionListener {

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

    public DragIt() {
        super("Rechtecke zeichnen");
        addMouseListener(this);
        addMouseMotionListener(this);
    }

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

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

    public void mouseMoved(MouseEvent me) {
    }

    public void mouseClicked(MouseEvent me) {
    }

    public void mouseEntered(MouseEvent me) {
    }

    public void mouseExited(MouseEvent me) {
    }

    public void mouseReleased(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(10,30,280,250);
            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", 20, 40);
        }
    }

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


\includegraphics[width=4.5cm]{ALDragIt.ps}



Alfred Nussbaumer 2003-02-10