Swing是否一直在扫描键盘输入(java)?

Swing是否一直在扫描键盘输入(java)?,java,swing,input,keyboard,Java,Swing,Input,Keyboard,我正在尝试使用g.drawImage()将我绘制的图像移动到Jpanel上。我需要知道为什么这个代码不起作用(我正在尝试使用w键将图像向上移动以重新定位图像) 不应在keyPressed()或keyReleased()方法内调用repaint() 稍后调用repaint()。不应在keyPressed()或keyreased()方法中调用repaint() 稍后调用repaint() 仅仅通过将KeyEvent命名为w,实际上并不是在检查w键。您需要检查if(w.getKeyCode()==Ke

我正在尝试使用g.drawImage()将我绘制的图像移动到Jpanel上。我需要知道为什么这个代码不起作用(我正在尝试使用w键将图像向上移动以重新定位图像)


不应在keyPressed()或keyReleased()方法内调用repaint()


稍后调用repaint()。

不应在keyPressed()或keyreased()方法中调用repaint()

稍后调用repaint()

  • 仅仅通过将KeyEvent命名为w,实际上并不是在检查w键。您需要检查
    if(w.getKeyCode()==KeyEvent.VK\u w)
  • Java中的Y坐标从顶部的0开始,因此您可能希望从
    CharY
    中减去以使其上升
  • 这将更新两次,一次是在按键时,另一次是在您放开按键时。我不确定这是否是你真正想要的
  • 如果不知道
    paint
    函数的内部是什么,或者您是否实现了它,很难说问题是否真的存在,但它应该是这样的

    public void绘制(图形g){
    g、 drawImage(yourImage,CharX,CharY,null);
    }

  • 仅仅通过将KeyEvent命名为w,实际上并不是在检查w键。您需要检查
    if(w.getKeyCode()==KeyEvent.VK\u w)
  • Java中的Y坐标从顶部的0开始,因此您可能希望从
    CharY
    中减去以使其上升
  • 这将更新两次,一次是在按键时,另一次是在您放开按键时。我不确定这是否是你真正想要的
  • 如果不知道
    paint
    函数的内部是什么,或者您是否实现了它,很难说问题是否真的存在,但它应该是这样的

    public void绘制(图形g){
    g、 drawImage(yourImage,CharX,CharY,null);
    }


  • 您还可以更改
    CharY=CharY+1
    CharY+=1您还可以更改
    CharY=CharY+1
    CharY+=1
    @user1952565查看您的帖子上关于它为什么不做任何事情的评论。这不会被编译,因为w是未知的。@user1952565查看您的帖子上关于它为什么不做任何事情的评论。这不会被编译,因为w是未知的。我把repaint()放在哪里;?而
    最好实现Runnable
    和put
    repaint()
    运行
    函数的内部,这样您就可以管理它发生的频率,我看不出有任何理由它不应该在按下
    键的内部工作。我在
    mouseMove
    中使用过它,没有任何问题,因此
    keyPressed
    也应该可以工作。代码的最大问题是没有
    实现keylister
    。一旦添加了它,您就需要创建一个构造函数并将其放入
    addKeyListener(这个)。然后您的
    按键
    函数实际上应该被调用。构造函数是一个在创建对象时自动调用的函数。它可用于设置其初始状态。现在,您的构造函数应该看起来像
    publicMyComponents(){addKeyListener(this);}
    我在放置它时出错,它建议将这个addKeyListener((KeyListener)this)放置;我应该在哪里重新绘制();?而
    最好实现Runnable
    和put
    repaint()
    运行
    函数的内部,这样您就可以管理它发生的频率,我看不出有任何理由它不应该在按下
    键的内部工作。我在
    mouseMove
    中使用过它,没有任何问题,因此
    keyPressed
    也应该可以工作。代码的最大问题是没有
    实现keylister
    。一旦添加了它,您就需要创建一个构造函数并将其放入
    addKeyListener(这个)。然后您的
    按键
    函数实际上应该被调用。构造函数是一个在创建对象时自动调用的函数。它可用于设置其初始状态。现在,您的构造函数应该看起来像
    publicMyComponents(){addKeyListener(this);}
    我在放置它时出错,它建议将这个addKeyListener((KeyListener)this)放置;
    int CharX = 1;
    int CharY = 30;
    
    public void keyPressed(KeyEvent w) {
        CharY = CharY + 1;
        repaint();
    }
    public void keyReleased(KeyEvent w) {
        CharY = CharY + 1;
        repaint();
    }
    
    public void keyPressed(w.getKeyCode() == KeyEvent.VK_W) {
        CharY = CharY + 1;
    }