java 华容道,为什么键盘事件没有用哦!!各位,拜托了!!
mport java.awt.Color;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
/**
*
* @author Administrator
*/
public class Test_ShuaRDao {
public static void main(String[] args) {
new HU_R_D("华容道游戏");
}
}
class Person extends JButton implements FocusListener{
int number;
Color c=Color.lightGray;
public Person(int number,String s){
//super(s);
this.setText(s);
this.setFont(new Font("宋体", 1,20));
this.setBackground(c);
this.number=number;
this.addFocusListener(this);
}
@Override
public void focusGained(FocusEvent e) {
this.setBackground(Color.red);
System.out.println("sdfs");
}
@Override
public void focusLost(FocusEvent e) {
this.setBackground(c);
}
}
class HU_R_D extends JFrame implements ActionListener,KeyListener,MouseListener{
Person person[] =new Person[10];
JButton up ,left,right,below;
JButton restart=new JButton("重新开始玩");
public HU_R_D (String s){
super(s);
init();
this.setBounds(20, 20, 500, 650);
this.setBackground(Color.white);
this.validate();
//this.pack();
this.setVisible(true);
this.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public void init(){
this.setLayout(null);
this.add(restart);
restart.setBounds(200, 580, 120, 25);
restart.setBackground(Color.ORANGE);
String s[]={"兵","兵","兵","兵","关羽","张飞","子龙","马超","黄忠","曹操"};
for(int i=0;i<s.length;i++){
person[i]=new Person(i,s[i]);
person[i].addMouseListener(this);
person[i].addKeyListener(this);
this.add(person[i]);
}
person[0].setBounds(50, 50, 100, 100);
person[1].setBounds(50, 150, 100, 100);
person[2].setBounds(350, 50, 100, 100);
person[3].setBounds(350, 150, 100, 100);
person[4].setBounds(150, 250, 200, 100);
person[5].setBounds(50, 250, 100, 200);
person[6].setBounds(150, 350, 100, 200);
person[7].setBounds(350, 250, 100, 200);
person[8].setBounds(250, 350, 100, 200);
person[9].setBounds(150, 50, 200, 200);
person[5].requestFocus();
up=new JButton();
up.setText("那一年..曹操..华容道");
up.setFont(new Font("宋体", 10,40));
left=new JButton();
right=new JButton();
below=new JButton();
up.setBackground(Color.yellow);
left.setBackground(Color.pink);
right.setBackground(Color.pink);
below.setBackground(Color.pink);
up.setBounds(0, 0, 500, 50);
below.setBounds(0, 550, 500, 20);
left.setBounds(0, 50, 50, 500);
right.setBounds(450, 50, 50, 500);
this.add(right);
this.add(left);
this.add(up);
this.add(below);
this.validate();//刷新
}
@Override
public void actionPerformed(ActionEvent e) {
this.dispose();
new HU_R_D("华容道游戏");
}
@Override
public void keyTyped(KeyEvent e) { }
@Override
public void keyPressed(KeyEvent e) {
Person man =(Person)e.getSource();
if(e.getKeyCode()==KeyEvent.VK_KP_DOWN){
System.out.println("sdfs");
go(man, below);
}
if(e.getKeyCode()==KeyEvent.VK_KP_UP){
go(man,up);
}
if(e.getKeyCode()==KeyEvent.VK_KP_LEFT){
go(man,left);
}
if(e.getKeyCode()==KeyEvent.VK_KP_RIGHT){
go(man ,right);
}
}
@Override
public void keyReleased(KeyEvent e) {}
@Override
public void mouseClicked(MouseEvent e) { }
@Override
public void mousePressed(MouseEvent e) {
int x=0,y=0;
Person man =(Person)e.getSource();
x=e.getX();
y=e.getY();
}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) { }
@Override
public void mouseExited(MouseEvent e) { }
public void go(Person man,JButton direction){
Boolean move =true;
Rectangle manRect =man.getBounds();
int x=manRect.x;
int y=manRect.y;
if(direction==up){
y=y-100;
}
if(direction==below){
y=y+100;
}
if(direction==left){
x=x-100;
}
if(direction==right){
x=x+100;
}
manRect.setLocation(x, y);
Rectangle directionRect=direction.getBounds();
for(int i=0;i<10;i++){
Rectangle personRect=person[i].getBounds();
if(manRect.intersects(personRect)&&man.number!=i){ //如果是覆盖了
move=false;
}
if(manRect.intersects(directionRect)){
move=false;
}
if(move=true){
man.setLocation(x, y);
}
}
}
}
[解决办法]
该回复于2012-05-17 10:26:14被版主删除
[解决办法]
谁有做完的?