代码更改: //主方法 package com.xxz;import java.awt.*; import java.awt.event.*; import javax.swing.*;public class HitAirplaneClient extends JPanel { //窗口的大小 public static final int GAMEWIDTH = 800; public static final int GAMEHEIGHT = 600;
private Airplane myAir; public HitAirplaneClient() { myAir = new Airplane(300, 500); //添加事件
//主方法
package com.xxz;import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class HitAirplaneClient extends JPanel { //窗口的大小
public static final int GAMEWIDTH = 800;
public static final int GAMEHEIGHT = 600;
private Airplane myAir; public HitAirplaneClient() { myAir = new Airplane(300, 500);
//添加事件
//设置窗口的大小
setPreferredSize(new Dimension(GAMEWIDTH, GAMEHEIGHT));
} //画出窗口中的组件
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g); // JPanel默认为opaque,UI类会填充背景色
myAir.draw(g);
} public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() { @Override
public void run() {
JFrame f = new JFrame("HitAirplane——xxzkidQQ:727753098");
HitAirplaneClient hac = new HitAirplaneClient();
f.setContentPane(hac);
f.pack();
f.addKeyListener(hac.new KeyMonitor());
//设置窗口不可变
f.setResizable(false);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocationRelativeTo(null); // 在主屏幕居中
f.setVisible(true);
}
});
} class KeyMonitor extends KeyAdapter { @Override
public void keyPressed(KeyEvent e) {
myAir.move(e);
repaint();
}
}
}//飞机类
class Airplane { //飞机的宽度,高度
private int airX, airY;
private int YSpeed = 5;
private int XSpeed = 5; public Airplane(int airX, int airY) {
this.airX = airX;
this.airY = airY;
} public int getairX() {
return airX;
} public void setairX(int airX) {
this.airX = airX;
} public int getairY() {
return airY;
} public void setairY(int airY) {
this.airY = airY;
} //画出飞机
public void draw(Graphics g) {
Color c = g.getColor();
g.setColor(Color.RED);
g.drawRect(airX, airY, 10, 30);
g.drawLine(airX, airY + 15, airX - 10, airY + 20);
g.drawLine(airX + 10, airY + 15, airX + 20, airY + 20);
g.setColor(c);
} public void move(KeyEvent e) {
int key = e.getKeyCode();
switch( key ) {
case KeyEvent.VK_W: {
airY -= YSpeed;
break;
}
case KeyEvent.VK_S: {
airY += YSpeed;
break;
}
case KeyEvent.VK_A: {
airX -= XSpeed;
break;
}
case KeyEvent.VK_D: {
airX += XSpeed;
break;
}
}
}
}
说句题外话,没有使用MVC感觉怪怪的。
直接使用paint(g)效果不好,好像是用compentPaint(g)才行。