никак не получается поменять события на уведомления, не могу понять в чем ошибка
Код:
import System.Collections.Generic.*;
import System.Windows.Forms.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Button;
import java.util.Observer;
public class Ball extends Observable implements Runnable, Observer
{
private int x, y;
private int dx, dy;
private int w, h;
private boolean life;
private boolean waiting;
private Thread thr;
private boolean t;
//private Random r;
public int getX() { return x; }
public int getY() { return y; }
public Ball(int X, int Y, int Dx, int Dy, int W, int H)
{
x = X; y = Y; dx = Dx; dy = Dy; w = W; h = H;
life = true; waiting = false; t = true;
thr = new Thread(this);
thr.start();
}
public void suspendBall() { waiting = true; }
synchronized public void resumeBall()
{
waiting = false;
this.notify();
}
public void FinishBall() { life = false; }
public void run()
{
while (life)
{
x += dx; y += dy;
if (x > w - 30 || x < 0)
{
dx = -dx;
}
if (y > h - 30 || y < 0)
{
dy = -dy;
}
synchronized (this)
{
if (waiting)
try
{
this.wait();
}
catch (InterruptedException e) { }
}
setChanged();
notifyObservers(new Boolean(false));
{
setChanged();
notifyObservers(new Boolean(true));
}
try
{
Thread.sleep(50);
}
catch (InterruptedException e) { }
}
}
public void update(Observable ob, Object oj)
{
boolean a = ((Boolean)oj).booleanValue();
if (a)
{
if ((Math.abs(((x + 30) / 2) - ((getX() + 30) / 2)) <= 15) && ((Math.abs(((y + 30) / 2) - ((getY() + 30) / 2)) <= 15)))
{
dx = -dx; dy = -dy;
}
}
}
}
public class Balls extends Frame implements Observer
{
ArrayList aL;
private Button butAdd;
private Button butR;
private Random r;
Object obj;
public Ball bl;
public Balls()
{
aL = new ArrayList();
r = new Random();
setSize(300, 200);
setVisible(true);
setLayout(null);
butAdd = new Button("Add");
butAdd.setLocation(17, 34);
butAdd.setSize(70, 40);
add(butAdd);
obj = this;
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent wE)
{
for (int i = 0; i < aL.size(); i++)
{
Ball b = (Ball)aL.get(i);
b.FinishBall();
}
System.exit(0);
}
});
butAdd.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent aE)
{
Ball a;
Ball b = new Ball(r.nextInt(50) + 10, r.nextInt(50) + 10, r.nextInt(10) + 5, r.nextInt(10) + 5, 300, 200);
b.addObserver((Balls)obj);
aL.add(b);
a = b;
for (int i = 0; i < aL.size() - 1; i++)
{
b = (Ball)aL.get(i);
b.addObserver(a);
a.addObserver(b);
}
}
});
}
public void paint(Graphics g)
{
for (int i = 0; i < aL.size(); i++)
{
Ball ball = (Ball)aL.get(i);
g.setColor(Color.BLUE);
g.drawOval(ball.getX(), ball.getY(), 30, 30);
}
}
public void update(Observable obs, Object obj)
{
repaint();
}
public static void main()
{
Balls balls = new Balls();
}
}