button按钮与keyevent关系
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谢谢
}