import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Window;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class AWTEx3 {
	private Label mousePos,
					  counterVal;

	public static void main(String[] args) {
		AWTEx3 app = new AWTEx3();
	} //main()

	public AWTEx3() {
		Frame wnd = new Frame("Einfaches Fenster");
		mousePos = new Label("mouse pos");
		counterVal = new Label("0");
		Button counter = new Button("add one!");

		wnd.setSize(200,100);
		wnd.setLayout(new FlowLayout() );
		wnd.add (mousePos);
		wnd.add(counter);
		wnd.add(counterVal);

		wnd.addWindowListener( new WindowClosingAdapter() );
		wnd.addMouseMotionListener( new MyMouseMotionAdapter(this) );
		counter.addMouseListener( new CounterClicked(this) );
		wnd.addMouseListener( new WindowClicked(this) );

		wnd.setVisible(true);
	} //constructor

	public void setMousePos(String newText) {
		mousePos.setText( newText );
	} //setMousePos()

	public void incrementCounter() {
		counterVal.setText( ""+(Integer.parseInt(counterVal.getText())+1) );
	} //incrementCounter()
	public void decrementCounter() {
		counterVal.setText( ""+(Integer.parseInt(counterVal.getText())-1) );
	} //decrementCounter()
} //class AWTEx3

class WindowClosingAdapter extends WindowAdapter {
	public void windowClosing(WindowEvent we) {
		Window wnd = we.getWindow();

		wnd.setVisible(false);
		wnd.dispose();
		System.exit(0);
	} //windowClosing()
} //class WindowClosingAdapter

class CounterClicked extends MouseAdapter {
	private AWTEx3 app;

	public CounterClicked(AWTEx3 app) {
		this.app = app;
	} //constructor

	public void mouseClicked( MouseEvent me) {
		app.incrementCounter();
	} //mouseClicked()
} //class CounterClicked

class WindowClicked extends MouseAdapter {
	private AWTEx3 app;

	public WindowClicked(AWTEx3 app) {
		this.app = app;
	} //constructor

	public void mouseClicked( MouseEvent me) {
		app.decrementCounter();
	} //mouseClicked()
} //class WindowClicked

class MyMouseMotionAdapter extends MouseMotionAdapter {
	private AWTEx3 app;

	public MyMouseMotionAdapter(AWTEx3 app) {
		this.app = app;
	} //constructor

	public void mouseMoved( MouseEvent me) {
		app.setMousePos( "("+me.getX()+","+me.getY()+")" );
	} //mouseMoved()
} //class myMouseAdapter
