Java 如何将击键Z添加到按键(KeyEvent e)以将球跳跃/重新绘制到新的随机位置?(使用了KeyListener演示。)
我的Java经验有限,尤其是在图形方面。到目前为止,我在这个问题上得到了很大的帮助。这是我在Eclipse中测试的启动代码(位于底部),运行良好。我用它来教一个高中生。根据下面注释中的说明,有人知道一种简单的方法来扩展已经很简单的程序,使球在按下Z按钮后跳跃/移动/重新绘制到一个随机的新位置吗?我正在考虑向按键(KeyEvent e)方法添加以下代码: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
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触发器arepaint
…我现在不关心java的随机类。但是我如何通过按Z键来改变坐标值呢?我希望从按下键的方法中改变坐标。谢谢,谢谢你。我想在if-else语句中做一个更改,如果可以按Z键的话。使用键绑定会是什么样子?有样品吗?我现在正在看链接。我不知道如何继续使用到目前为止有效的代码。请帮忙?
else if(keyCode == KeyEvent.VK_Z)
{
x = x + radius;
y = y + radius;
}