/* 一个图形推着另一个图形移动 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Ex3_2extends JFrame
{
public Ex3_2()
{ super("推着另一图形移动");
setSize(400,400);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
MovePanel m1 = newMovePanel();
add(m1,BorderLayout.CENTER);
m1.requestFocus();
validate();
}
public static voidmain(String args[])
{
JFrame.setDefaultLookAndFeelDecorated(true);
new Ex3_2();
}
}
class MovePanel extendsPanel implements KeyListener
{ //创建一个可推动图形的面板
int step = 10;
int x1=50, y1=50;
int x2=100, y2=100;
draw_red draw1;
draw_black draw2;
MovePanel()
{
setBounds(0,0,400,400);
draw1 = newdraw_red();
draw2 = newdraw_black();
addKeyListener(this);
// repaint();
}
public voidpaint(Graphics g)
{
draw1.draw(g,x1,y1);
draw2.draw(g,x2,y2);
}
public voidkeyPressed(KeyEvent e)//设置键盘事件
{
if(e.getKeyCode()==KeyEvent.VK_UP)
{ moveUp();}
elseif(e.getKeyCode()==KeyEvent.VK_DOWN)
{ moveDown(); }
else if(e.getKeyCode()==KeyEvent.VK_LEFT)
{moveLeft(); }
elseif(e.getKeyCode()==KeyEvent.VK_RIGHT)
{ moveRight(); }
}
public voidkeyTyped(KeyEvent e) {}
public voidkeyReleased(KeyEvent e) {}
public void moveUp()
{
if((draw1.y-1) == (draw2.y+draw2.HEIGHT)&& draw1.x == draw2.x)
{
draw1.y -= step;
draw2.y -= step;
}
else draw1.y -= step;
y1=draw1.y;
y2=draw2.y;
repaint();
}
public void moveDown()
{
if((draw1.y+1+draw1.HEIGHT) == draw2.y&& draw1.x == draw2.x)
{
draw1.y += step;
draw2.y += step;
}
else draw1.y += step;
y1=draw1.y;
y2=draw2.y;
repaint();
}
public void moveLeft()
{
if((draw1.x-1) == (draw2.x+draw2.WIDTH)&& draw1.y == draw2.y)
{
draw1.x -= step;
draw2.x -= step;
}
else draw1.x -=step;
x1=draw1.x;
x2=draw2.x;
repaint();
}
public void moveRight()
{
if((draw1.x+1+draw1.WIDTH) == draw2.x&& draw1.y == draw2.y)
{
draw1.x += step;
draw2.x += step;
}
else draw1.x += step;
x1=draw1.x;
x2=draw2.x;
repaint();
}
}
class draw_red
{
int WIDTH = 30, HEIGHT= 30;
int x, y;
public voiddraw(Graphics g, int _x, int _y)
{
x = _x;
y = _y;
g.setColor(Color.red);
g.fillRect(x,y,WIDTH,HEIGHT);
}
}
class draw_black
{
int WIDTH = 30, HEIGHT= 30;
int x, y;
public voiddraw(Graphics g, int _x, int _y)
{
x = _x;
y = _y;
g.setColor(Color.black);
g.fillRect(x,y,WIDTH,HEIGHT);
}
};