button按钮与keyevent关系

zyd1234567890 2015-08-17 05:14:54
import java.awt.Button;
import java.awt.Color;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Label;
import java.awt.Rectangle;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;

//import Tank.Direction;

public class TankClient extends Frame {
public static final int GAME_WIDTH = 800;
public static final int GANE_HEIGHT = 600;
Tank MyTank = new Tank(50, 180, true, Dir.stop, this);
ConnDialog dialog=new ConnDialog();

List<Missile> missiles = new ArrayList<Missile>();
List<Explode> explodes = new ArrayList<Explode>();
List<Tank> tanks = new ArrayList<Tank>();

Image offScreamImage = null;
Missile m = null;

NetClient nc = new NetClient(this);

public void paint(Graphics g) {
g.drawString("zidan number" + missiles.size(), 10, 40);
g.drawString("explodes number" + explodes.size(), 10, 55);
g.drawString("Tanks number" + tanks.size(), 10, 70);
MyTank.draw(g);

for (int i = 0; i < missiles.size(); i++) {

Missile m = missiles.get(i);
m.hitTanks(tanks);
m.hitTank(MyTank);
m.draw(g);

// 另一种方法
// if(!m.isLive())missiles.remove(m);
// else m.draw(g);
}

for (int i = 0; i < explodes.size(); i++) {
Explode e = explodes.get(i);
e.draw(g);
}

for (int i = 0; i < tanks.size(); i++) {
Tank t = tanks.get(i);
t.draw(g);
}

}

public void update(Graphics g) {

if (offScreamImage == null) {
offScreamImage = this.createImage(GAME_WIDTH, GANE_HEIGHT);
}

Graphics goffScream = offScreamImage.getGraphics();
Color c = goffScream.getColor();
goffScream.setColor(Color.green);
goffScream.fillRect(0, 0, GAME_WIDTH, GANE_HEIGHT);
goffScream.setColor(c);
paint(goffScream);
g.drawImage(offScreamImage, 0, 0, null);

}

private class KeyMonitor extends KeyAdapter {

public void keyReleased(KeyEvent e) {
MyTank.keyReleased(e);
// int key=e.getKeyCode();
// if(key==KeyEvent.VK_C){
// dialog.setVisible(true);
// } else {
//
// MyTank.Released(e);
// }
// }
//
// 放在这里就不行?为什么
//
}

public void keyPressed(KeyEvent e) {
int key=e.getKeyCode();
if(key==KeyEvent.VK_C){
dialog.setVisible(true);
} else {

MyTank.keyPressed(e);
}
}

}



private class PaintThread implements Runnable {

public void run() {
while (true) {
repaint();

try {
Thread.sleep(50);

} catch (Exception e) {
e.printStackTrace();
}
}
}

}

public void launchFrame() {
// for(int i=0;i<10;i++){
// tanks.add(new Tank(60+40*(i+1),80,false,Dir.D,this));
// }
this.setLocation(300, 50);
this.setSize(GAME_WIDTH, GANE_HEIGHT);
this.addKeyListener(new KeyMonitor());
setVisible(true);
this.setResizable(false);
this.setTitle("TankWar");
this.setBackground(Color.GREEN);
this.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {
// setVisible(false);
System.exit(0);
}

});

new Thread(new PaintThread()).start();
//nc.connect("127.0.0.1", TankServer.TCP_PORT);
}

public static void main(String[] args) {
TankClient tc = new TankClient();
tc.launchFrame();
}


public class ConnDialog extends Dialog{

Button b=new Button("确定");
TextField tfIP=new TextField("127.0.0.1",5);
TextField tfPort=new TextField(""+TankServer.TCP_PORT,5);
TextField tfMyUDPPort=new TextField("2223",5);
public ConnDialog(){
super(TankClient.this,true);

this.setLayout(new FlowLayout());
this.add(new Label("IP :"));
this.add(tfIP);
this.add(new Label("Port :"));
this.add(tfPort);
this.add(new Label("MY UDP port :"));
this.add(tfMyUDPPort);
this.setBounds(400, 300, 500, 150);
this.setLocation(300,200);
this.add(b);
b.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
String IP=tfIP.getText().trim();
int Port=Integer.parseInt(tfPort.getText().trim());
int MyUDPPort=Integer.parseInt(tfMyUDPPort.getText().trim());
nc.setUdpPort(MyUDPPort);
nc.connect(IP, Port);
setVisible(false);


}
});

this.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {
setVisible(false);
}

});

}
}


正如我注释那写的为啥放在release下就不行呢,坦克方向不能移动键盘失效,放在pressed下就可以
可以加我qq 2474576148谢谢



















}
...全文
118 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
当你将一个类用作事件监听器时,你已经设置好一个特定的事件类型,它会用该类进行监听。接下来的操作是:一个匹配的监听器必须被加入到该组件中 组件被创建之后,可以在组件上调用如下方法来将监听器与它联系起来 addActionListener( ) 可用于 Button,Check, TexyField 等组件 addAdjustmentListener( ) 可用于 ScrollBar 组件 addFocusListener( ) 可用于所有可视化组件 addItemListener( ) 可用于 Button,CheckBox 等组件 addKeyListener( ) 可用于所有可视化组件 addMouseListener( ) 可用于所有可视化组件 addMouseMotionListener( ) 可用于所有可视化组件 addWindowsListener( ) 可用于 Window,Frame等组件 例:下面语句创建一个 Button 对象,并将它与动作事件监听器联系起来 Button button = new Button( “OK” ) ; button . addActionListener ( this ) ; //this 指明当前类就是事件监听器 2 使用方法 (1)动作事件(ActionEvent) 发生在用户完成了使用下列组件之一的动作: Button , CheckBox , ComboBox , TextField , RadioButton 类为了能够处理这些事件必须实现接口 ActionListener 。 每个产生一个动作事件的组件上要调用方法 addActionListener( ) 方法 actionPerformed(ActionEvent evt) 是接口 ActionListener 惟一的 方法采用如下格式: public void actionPerformed(ActionEvent evt) { //…… } 在 ActionEvent 对象上可以使用的方法: getSource( ) 获取产生事件组件的组件名 getActionCommand( ) 获取与组件有关的文本,如命令按钮的标签 键盘事件(KeyEvent) 发生在键盘上的某个键被按下时。 类为了能够处理这些事件必须实现接口 KeyListener 。 每个产生一个键盘事件的组件上要调用方法 addKeyListener( ) 在接口 KeyListener 中有三个方法: public void keyPressed(KeyEvent evt) { //…… } public void keyReleased(KeyEvent evt) { //…… } public void keyTyped(KeyEvent evt) { //…… } 在 KeyEvent 对象上可以使用的方法: getKeyChar( ) 返回与事件相关的键盘字符的 Unicode 码 . . . . . . . . . .

50,599

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧