用JAVA创建一个窗口,里面有一个物体,我要通过键盘的方向键来控制物体做出相应的移动,应该怎么做?望各位大侠指点!能否给出一小段具体的代码?

解决方案 »

  1.   

    你可以判断输入字符的ASCII码。如果是方向键的ASCII码就让物品根据输入的方向来移动。
    比如你的物品是一个圆,当你输入的字符为方向键右时圆心的X坐标+1,方向为右X坐标-1,类似的向上和向下分别对应Y坐标加1和减1。
      

  2.   

    /**
    *编写小游戏,用键盘控制物体移动
    */import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.geom.*;public class Game
    {
    public static void main(String args[])
    {
    GameFrame frame = new GameFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.show();
    }
    }class GameFrame extends JFrame
    {
    private final int WIDTH = 500;
    private final int HEIGHT = 400;
    private GamePanel panel; public GameFrame()
    {
    Toolkit kit = Toolkit.getDefaultToolkit();
    Dimension screenSize = kit.getScreenSize();
    int width = screenSize.width;
    int height = screenSize.height;
    int x = (width - WIDTH)/2;
    int y = (height - HEIGHT)/2;
    setLocation(x, y);
    setSize(WIDTH, HEIGHT);
    setTitle("小游戏");
    setResizable(false); Container con = getContentPane();
    panel = new GamePanel();
    con.add(panel);
    panel.addKeyListener(new KeyAdapter()
    {
    public void keyPressed(KeyEvent e)
    {
    int a = 0;
    if(e.KEY_PRESSED == e.VK_LEFT)
    a = -1;
    panel.setPlace(a);
    }
    });
    }
    }class GamePanel extends JPanel
    {
    private double x = 50;
    private double y = 50;
    private final double WIDTH = 30;
    private final double HEIGHT = 30; public void paintComponent(Graphics g)
    {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D)g; Ellipse2D circle = new Ellipse2D.Double(x, y, WIDTH, HEIGHT);
    g2.draw(circle);
    g2.setPaint(Color.red);
    g2.fill(circle);
    } public void setPlace(int a)
    {
    x = x + a;
    repaint();
    }
    }
    我这段程序中,为什么按下方向键左,圆形不会向左移动?请问问题出在哪里?addKeyListener方法应该加在哪个组件上?
      

  3.   

    用setlocation可能可以public void setBlock(JButton block,Container con){
        ......
        
        block.setLoation(x,y);
        con.validate;
    }
      

  4.   

    错误的原因有2个,第一个是addKeyListener(new KeyAdapter() 要加在frame上不是panel上。第二个是事件的判断有问题,应该是(e.getKeyCode() == KeyEvent.VK_LEFT)而不是e.Key_PRESSED==e.VK_LEFT),事实上当按下左键后,常量字段KEY_PRESSED的值与VK_LEFT的值并不相等。下面是改过的。
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.geom.*;public class Game {
    public static void main(String args[]) {
    GameFrame frame = new GameFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.show();
    }
    }class GameFrame extends JFrame {
    private final int WIDTH = 500; private final int HEIGHT = 400; private GamePanel panel; public GameFrame() {
    Toolkit kit = Toolkit.getDefaultToolkit();
    Dimension screenSize = kit.getScreenSize();
    int width = screenSize.width;
    int height = screenSize.height;
    int x = (width - WIDTH) / 2;
    int y = (height - HEIGHT) / 2;
    setLocation(x, y);
    setSize(WIDTH, HEIGHT);
    setTitle("小游戏");
    setResizable(false);
    requestFocus();
    Container con = getContentPane();
    panel = new GamePanel();
    con.add(panel); addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent e) {
    int a = 0;
    if (e.getKeyCode() == KeyEvent.VK_LEFT) {
    a = -10;
    panel.setPlace(a); }
    }
    });
    }
    }class GamePanel extends JPanel {
    private int x = 50; private int y = 50; private final double WIDTH = 30; private final double HEIGHT = 30; public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g; Ellipse2D circle = new Ellipse2D.Double(x, y, WIDTH, HEIGHT);
    g2.draw(circle);
    g2.setPaint(Color.red);
    g2.fill(circle);
    } public void setPlace(int a) {
    x = x + a;

    repaint();
    }}
      

  5.   

    非常感谢suncs2001的指点,谢谢!!!