Java 如何将击键Z添加到按键(KeyEvent e)以将球跳跃/重新绘制到新的随机位置?(使用了KeyListener演示。)

Java 如何将击键Z添加到按键(KeyEvent e)以将球跳跃/重新绘制到新的随机位置?(使用了KeyListener演示。),java,swing,jframe,keylistener,keyevent,Java,Swing,Jframe,Keylistener,Keyevent,我的Java经验有限,尤其是在图形方面。到目前为止,我在这个问题上得到了很大的帮助。这是我在Eclipse中测试的启动代码(位于底部),运行良好。我用它来教一个高中生。根据下面注释中的说明,有人知道一种简单的方法来扩展已经很简单的程序,使球在按下Z按钮后跳跃/移动/重新绘制到一个随机的新位置吗?我正在考虑向按键(KeyEvent e)方法添加以下代码: else if(keyCode == KeyEvent.VK_Z) { //Not sure what to add h

我的Java经验有限,尤其是在图形方面。到目前为止,我在这个问题上得到了很大的帮助。这是我在Eclipse中测试的启动代码(位于底部),运行良好。我用它来教一个高中生。根据下面注释中的说明,有人知道一种简单的方法来扩展已经很简单的程序,使球在按下Z按钮后跳跃/移动/重新绘制到一个随机的新位置吗?我正在考虑向按键(KeyEvent e)方法添加以下代码:

else if(keyCode == KeyEvent.VK_Z)    
{     
   //Not sure what to add here. Just want to change X and Y coordinates to 
   //anything, so long as the program works and stays fairly simple  
   //for now.
   //----> g.fillOval(x + radius, y + radius, 2 * radius, 2 * radius);   
   // this line above says "g can not be resolved". 
} 

如果您有任何建议或想法可以使程序简单,我们将不胜感激。谢谢大家!


尝试这样做:

public void keyPressed(KeyEvent e){
if(e.getKeyCode == KeyEvent.VK_Z){

moveRand();
//Assuming that is the method for moving the ball randomly.
    }
}

public void moveRand(Graphics2D g){

g.drawOval(Random.nextInt() / window.getWidth() + 1, Random.nextInt() / window.getHight() + 1, ballWidth, ballHight);


}

希望这能有所帮助。

无法解决
g
的原因是
keyPressed()方法中不存在它
g
是方法
paint()
的参数。这意味着您只能在方法
paint()
中引用它。您可以在方法
paint()
之外声明另一个名为
g
的变量,但它与
g
不同。它甚至不必有相同的类型

也就是说,为了解决问题,您根本不需要直接引用
g
paint()
方法已经可以处理绘制圆。您只需要更改圆的位置,并告诉应用程序重新绘制它。如果将新值指定给
x
y
,然后调用
repaint()
,圆圈将移动。请注意,
repaint()
方法的末尾已经调用了
keyPressed()

这里有一个例子。将equals右边的代码替换为适合您的问题的代码

else if(keyCode == KeyEvent.VK_Z)    
{     
   x = x + radius;
   y = y + radius;
}

如果您查看其他If/else子句,您将看到它们也在这样做。

基本概念是更改coords的值,然后调用repaint()。这个方法就是你所说的
g
所在的地方。如果问题在于创建随机坐标,那么检查java的
random
class.1-Use,它们不会遇到与
KeyListener
相同的焦点相关问题。2-调用
super.paint(g)
在你的
paint
方法中,事实上,你真的不应该覆盖顶级容器的
paint
。绘制应该在paint方法中完成,你只需要调整对象的x/y位置a触发器a
repaint
…我现在不关心java的随机类。但是我如何通过按Z键来改变坐标值呢?我希望从按下键的方法中改变坐标。谢谢,谢谢你。我想在if-else语句中做一个更改,如果可以按Z键的话。使用键绑定会是什么样子?有样品吗?我现在正在看链接。我不知道如何继续使用到目前为止有效的代码。请帮忙?
else if(keyCode == KeyEvent.VK_Z)    
{     
   x = x + radius;
   y = y + radius;
}