package javacodebook.gui.robotmouse;

import java.awt.*;
import java.awt.event.*;

/**
 * @author Benjamin Rusch
 *
 * In diesem Beispiel wird die Mouse beim Klick auf einen Button automatisch
 * auf den nächsten Button geschoben.
 */
public class RobotFrame  extends Frame {
 
    // Roboter
    private Robot robot = null;
    
    // Buttons
    private Button one    = new Button("eins");
    private Button two    = new Button("zwei");
    private Button three  = new Button("drei");
    private Button four   = new Button("vier");
    
    /**
     *	Konstruktor von RobotFrame.
     */
    public RobotFrame(String title) {
        
        super(title);
        // Beim Klicken des Schließen-Buttons vom HauptFenster
        // wird das Programm beendet.
        this.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent we) {
                    System.exit(0);
                }
        });	
        // Buttons werden in einer 2*2 Matrix angeordnet
        this.setLayout(new GridLayout(2,2));
        
        // wird eine der Buttons geklickt, wird mouseMove() mit dem nächsten
        // Button als Übergabeparameter aufgerufen
        one.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ae){
                moveMouse(two);
            }
        });
        two.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ae){
                moveMouse(three);
            }
        });
        three.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ae){
                moveMouse(four);
            }
        });
        four.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ae){
                moveMouse(one);
            }
        });
        
        this.add(one);
        this.add(two);
        this.add(three);
        this.add(four);
        
    }
    
    /**
     * mouseMove() bestimmt die absolute Position der übergebenen Komponente, und
     * bewegt die Mouse dorthin
     */
    public void moveMouse(Component c) {
        try {
            
            // Zentrum der Komponente relativ zum Fenster.
            int relativX = c.getX()+c.getWidth()/2;
            int relativY = c.getY()+c.getHeight()/2;

            // Linke obere Ecke des Frames
            Point frameOrigin = this.getLocation();
            
            // Absolute Komponenten Position
            int absoluteX = frameOrigin.x+relativX;
            int absoluteY = frameOrigin.y+relativY;

            // Ein Robot-Objekt wird benötigt, muss im try-Block 
            // instanziiert werden
            robot = new Robot();
            // der Cursor wird bewegt
            robot.mouseMove(absoluteX,absoluteY);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

}
