如何在 KeyListener 中调用图形方法?
Posted
技术标签:
【中文标题】如何在 KeyListener 中调用图形方法?【英文标题】:How do I call Graphics Method inside KeyListener? 【发布时间】:2018-06-19 17:11:48 【问题描述】:提前,我想说有很多类似的帖子,但是,它们都不适用于我,或者它们实际上都没有任何答案,并且已经过时了,这意味着可能会有新的java可以帮助我解决问题的功能。
无论如何,我想制作一个有网球拍的游戏。当然,他们必须轮换。为了旋转,我必须在 KeyListener 中调用我的 Graphics2D 方法。如果不在我的关键侦听器方法中添加新的 Graphics2D 变量,我将如何做到这一点?
以下是我实现这一目标的所有方法:
public void draw(Graphics2D g2d)
g2d.drawImage(getPaddleImg(), x, y, null);
public static Image getPaddleImg()
ImageIcon ic = new ImageIcon("C:/Users/Elliot/Desktop/Eclipse Game Tennis/paddle.png");
return ic.getImage();
public void keyPressed(KeyEvent e)
int key = e.getKeyCode();
if(key==KeyEvent.VK_W)
g2d.rotate(Math.toRadians(5));
else if(key==KeyEvent.VK_W)
g2d.rotate(Math.toRadians(-5));
public void keyReleased(KeyEvent e)
int key = e.getKeyCode();
if(key==KeyEvent.VK_W)
g2d.rotate(Math.toRadians(0));
else if(key==KeyEvent.VK_W)
g2d.rotate(Math.toRadians(0));
我知道,由于KeyPressed()
和KeyReleased()
方法内部的g2d
,这段代码会给我一个错误。我如何在这两种方法中调用g2d
?或者我如何在 draw()
方法中做同样的事情?
【问题讨论】:
【参考方案1】:错误方式:可以使用Component.getGraphics()
获取图形对象。
正确的方法:所有的绘画都应该在paint(Component)
方法内完成。这是因为用户可以随时调整/打开/关闭窗口。在您的KeyListener
(也研究键绑定)中,您应该更新有关如何绘制球员/球拍的设置,然后调用repaint()
【讨论】:
我知道,但是如何访问g2d
变量?感谢您的帮助,但这无助于解决我在方法中获取变量的问题,除非我使用“错误”的方式
所有(根据我的经验)图形对象都可以转换为 Graphics2D
你的意思是(Graphics2D) g
其中g
是Graphics
变量吗?
是的,我就是这个意思
实际上我之前在我的代码中使用过它,但是当我已经有一个 Graphics2D
变量时,这有什么帮助【参考方案2】:
好的!其实是我自己想出来的!我所做的在我的draw()
方法中被称为g2d.rotate(.....)
。我所做的是创建检查旋转的变量,并在我的KeyPressed()
方法中将它们设置为真或假。这是我在draw()
方法中使用的代码:
if(isRotatingPositive == true)
g2d.rotate(Math.toRadians(speed));
else if(isRotatingNegative == true)
g2d.rotate(Math.toRadians(-speed));
【讨论】:
以上是关于如何在 KeyListener 中调用图形方法?的主要内容,如果未能解决你的问题,请参考以下文章
KeyListener 多久检查一次键盘输入? (Java 图形用户界面)