问题描述
呵呵,我就一新手,代码是书上的。主要是实验组件上的鼠标事件。当一个组件处于激活状态时,组件可以成为触发KeyEvent事件的事件源。组件可以触发焦点事件,从无输入焦点变为有输入焦点是,触发FocusEvent事件。使用FocusListener接口处理焦点事件。JavaCodeMainClass.javapublicclassMainClass{publicstaticvoidmain(Stringargs[]){newHuaRongRoad();}}HuaRongRoad.javaimportjava.awt.*;importjavax.swing.*;importjava.awt.event.*;publicclassHuaRongRoadextendsJFrameimplementsMouseListener,KeyListener,ActionListener{Personperson[]=newPerson[10];JButtonleft,right,above,below;JButtonrestart=newJButton("重新开始");publicHuaRongRoad(){init();setBounds(100,100,320,400);setVisible(true);validate();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}publicvoidinit(){setLayout(null);add(restart);restart.setBounds(100,320,120,25);restart.addActionListener(this);Stringname[]={"曹操","关羽","张","刘","周","黄","兵","兵","兵","兵"};for(intk=0;k<name.length;k++){person[k]=newPerson(k,name[k]);person[k].addMouseListener(this);person[k].addKeyListener(this);add(person[k]);}person[0].setBounds(104,54,100,100);person[1].setBounds(104,154,100,50);person[2].setBounds(54,154,50,100);person[3].setBounds(204,154,50,100);person[4].setBounds(54,54,50,100);person[5].setBounds(204,54,50,100);person[6].setBounds(54,254,50,50);person[7].setBounds(204,254,50,50);person[8].setBounds(104,204,50,50);person[9].setBounds(154,204,50,50);person[9].requestFocus();left=newJButton();right=newJButton();above=newJButton();below=newJButton();add(left);add(right);add(above);add(below);left.setBounds(49,49,5,260);right.setBounds(254,49,5,260);above.setBounds(49,49,210,5);below.setBounds(49,304,210,5);validate();}publicvoidkeyTyped(KeyEvente){}publicvoidkeyReleased(KeyEvente){}publicvoidkeyPressed(KeyEvente){Personman=(Person)e.getSource();if(e.getKeyCode()==KeyEvent.VK_DOWN){go(man,below);}if(e.getKeyCode()==KeyEvent.VK_UP){go(man,above);}if(e.getKeyCode()==KeyEvent.VK_LEFT){go(man,left);}if(e.getKeyCode()==KeyEvent.VK_RIGHT){go(man,right);}}publicvoidmousePressed(MouseEvente){Personman=(Person)e.getSource();intx=-1,y=-1;x=e.getX();y=e.getY();intw=man.getBounds().width;inth=man.getBounds().height;if(y>h/2){go(man,below);}if(y<h/2){go(man,above);}if(x>w/2){go(man,left);}if(x<w/2){go(man,right);}}publicvoidmouseReleased(MouseEvente){}publicvoidmouseEntered(MouseEvente){}publicvoidmouseExited(MouseEvente){}publicvoidmouseClicked(MouseEvente){}publicvoidgo(Personman,JButtondirection){booleanmove=true;RectanglemanRect=man.getBounds();intx=man.getBounds().x;inty=man.getBounds().y;if(direction==below){y=y+50;}elseif(direction==above){y=y-50;}elseif(direction==left){x=x-50;}elseif(direction==right){x=x+50;}manRect.setLocation(x,y);RectangledirectionRect=direction.getBounds();for(intk=0;k<10;k++){RectanglepersonRect=person[k].getBounds();if((manRect.intersects(personRect))&(man.number!=k)){move=false;}}if(manRect.intersects(directionRect)){move=false;}if(move==true){man.setLocation(x,y);}}publicvoidactionPerformed(ActionEvente){dispose();newHuaRongRoad();}}Person.javaimportjava.awt.*;importjavax.swing.*;importjava.awt.event.*;publicclassPersonextendsJButtonimplementsFocusListener{intnumber;Colorc=newColor(255,245,170);Person(intnumber,Strings){super(s);setBackground(c);this.number=number;c=getBackground();setFont(newFont("楷体_BG2312",Font.BOLD,14));addFocusListener(this);}publicvoidfocusGained(FocusEvente){setBackground(Color.red);}publicvoidfocusLost(FocusEvente){setBackground(c);}}
解决方案
解决方案二:
做的不错不过这个例子可能是教你熟悉组件,所有格子都是JButton而在正式做游戏的时候很忌讳使用一个控件(例如JButton)来做一个游戏中的单元格的这往往需要自己用Graphics2D来在一个面板上画的这样可以节省资源,一个Swing组件,附带的属性和方法很多,创建一个蛮耗资源的一个简单的游戏看不出来如果一个复杂点的,比如围棋,你不能弄19*19个JButton吧所以,这个例子学习就好自己写游戏,一定要掌握Graphics2D的核心部分自己来画,不能全靠控件
解决方案三:
莫非是java2实用教程里的例子?
解决方案四:
自己写游戏,一定要掌握Graphics2D的核心部分自己来画,不能全靠控件这句话不错......
解决方案五:
学习了.看下.还没有学那么的高深.刚刚入门..菜鸟一个..