import java.awt.*;
import java.awt.event.*;public class TankClient {
public static void main(String[] agrs) {
new MyFrame();
}
}class MyFrame extends Frame {
Point point = new Point(150, 150); public MyFrame() {
MyFrame tx = null;
// Point point = new Point(150, 150); // public void launchFrame(){
setBounds(150, 50, 800, 600);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
setVisible(false);
System.exit(0);
}
});
addKeyListener(new MyKeyListener(this));
setBackground(Color.gray);
setResizable(false);
setVisible(true);
} class MyKeyListener extends KeyAdapter {
MyFrame tx = null; public MyKeyListener(MyFrame e) {
tx = e;
}
                //就是这里按 上下左右键移动圆 但是当我向左和向右移动的时候总是出界! 怎么改 !
public void keyPressed(KeyEvent e) {
double x = point.getX() ;
double y = point.getY() ;
if (e.getKeyCode() == e.VK_UP && y >= 30.0) {
x = point.getX();
y = point.getY() - 5.0;
}
if (e.getKeyCode() == e.VK_DOWN && y <= 600.0) {
x = point.getX();
y = point.getY() + 5.0;
}
if (e.getKeyCode() == e.VK_LEFT && x >= 10.0) {
x = point.getX() - 5.0;
y = point.getY();
}
if (e.getKeyCode() == e.VK_RIGHT && y <= 800.0) {
x = point.getX() + 5.0;
y = point.getY();
} point.setLocation(x, y);
tx.repaint();
}
} public void paint(Graphics g) {
Color col = g.getColor();
g.setColor(Color.blue);
g.fillOval((int) point.getX(), (int) point.getY(), 50, 50);
g.setColor(col);
}
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【yangyongjie81】截止到2008-07-14 18:17:39的历史汇总数据(不包括此帖):
    发帖的总数量:20                       发帖的总分数:620                      每贴平均分数:31                       
    回帖的总数量:9                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:20                       结贴的总分数:620                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   


    public void keyPressed(KeyEvent e) {
                double x = point.getX();
                double y = point.getY();
                if (e.getKeyCode() == e.VK_UP && y >= 30.0) {
                    y = y - 5.0;
                }
                if (e.getKeyCode() == e.VK_DOWN && y <= 540.0) {
                    y = y + 5.0;
                }
                if (e.getKeyCode() == e.VK_LEFT && x >= 10.0) {
                    x = x - 5.0;
                }
                if (e.getKeyCode() == e.VK_RIGHT && x <= 740.0) {
                    x = x + 5.0;
                }
                point.setLocation(x, y);
                tx.repaint();
            }
      

  3.   

    import java.awt.Color;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    public class TankClient { public static void main(String[] agrs) {
    new MyFrame();
    }}
    class MyFrame extends Frame { public static final int TANK_SIZE = 50;  //坦克大小
    public static final int TANK_STEP = 5;  //坦克移动步长 private Point point = new Point(150, 150); public MyFrame() {
    MyFrame tx = null;
    // Point point = new Point(150, 150);
    // public void launchFrame(){
    setBounds(150, 50, 800, 600);
    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    setVisible(false);
    System.exit(0);
    }
    });
    addKeyListener(new MyKeyListener(this));
    setBackground(Color.gray);
    setResizable(false);
    setVisible(true);
    } class MyKeyListener extends KeyAdapter { private MyFrame tx = null; public MyKeyListener(MyFrame e) {
    tx = e;
    } // 就是这里按 上下左右键移动圆 但是当我向左和向右移动的时候总是出界! 怎么改 !
    public void keyPressed(KeyEvent e) {
    double x = point.getX();
    double y = point.getY();
    if (e.getKeyCode() == KeyEvent.VK_UP && y >= MyFrame.this.getInsets().top) {
    x = point.getX();
    y = point.getY() - TANK_STEP;
    }
    if (e.getKeyCode() == KeyEvent.VK_DOWN && y <= MyFrame.this.getHeight() - MyFrame.this.getInsets().bottom - TANK_SIZE) {
    x = point.getX();
    y = point.getY() + TANK_STEP;
    }
    if (e.getKeyCode() == KeyEvent.VK_LEFT && x >= MyFrame.this.getInsets().left) {
    x = point.getX() - TANK_STEP;
    y = point.getY();
    }
    if (e.getKeyCode() == KeyEvent.VK_RIGHT && x <= MyFrame.this.getWidth() - MyFrame.this.getInsets().right - TANK_SIZE) {
    x = point.getX() + TANK_STEP;
    y = point.getY();
    }
    point.setLocation(x, y);
    tx.repaint();
    } } public void paint(Graphics g) {
    Color col = g.getColor();
    g.setColor(Color.blue);
    g.fillOval((int)point.getX(), (int)point.getY(), TANK_SIZE, TANK_SIZE);
    g.setColor(col);
    }}这样改无论你的窗口多大,坦克都不会溜达出窗口了。