public class Car {
private String name ;
private int x ;
private int y ;
private HashSet<CarListener> listeners = new HashSet<CarListener>();
public Car(String name, int x, int y) {
super();
this.name = name;
this.x = x;
this.y = y;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public void drawMe(Graphics g){
g.drawRect(x, y, 50, 50);
}
public void driver(){
for(CarListener l:listeners){
l.move(this);
}
System.out.println("开始驾驶");
}
public void stop(){
for(CarListener l:listeners){
l.move(this);
}
System.out.println("停车");
}
public void addListener(CarListener l){
this.listeners.add(l);
}
}
public interface CarListener {
public void move(Car car);
}
public class Controller extends KeyAdapter implements CarListener{
private Car car ;
@Override
public void keyPressed(KeyEvent e) {
super.keyPressed(e);
System.out.println("处理按键事件");
int x = car.getX();
int y = car.getY();
switch (e.getKeyCode()) {
case KeyEvent.VK_W:
y-=10;
car.setY(y);
move(car);
break;
case KeyEvent.VK_S:
y+=10;
car.setY(y);
move(car);
break;
default:
break;
}
}
public Controller(Car car) {
super();
this.car = car;
}
@Override
public void move(Car car) {
System.out.println("control move方法"+car);
System.out.println("控制器的move方法");
}
}
public class GameFrame extends JFrame implements Runnable{
private Car car ;
public GameFrame(Car c){
this.car = c ;
this.setLocation(400, 50);
this.setSize(500, 500);
this.setDefaultCloseOperation(3);
this.setVisible(true);
}
@Override
public void paint(Graphics g) {
super.paint(g);
car.drawMe(g);
}
@Override
public void run() {
while(true){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int x = car.getX();
car.setX(++x);
repaint();
}
}
}