【发布时间】:2017-02-05 20:19:34
【问题描述】:
这是我第一次使用挥杆图形,请多多包涵。我当前的目标是在我按下其中一个箭头键时改变纹理(改变我正在使用的图像的方向)。为此,我创建了一个绘制方法,并且我想在按下箭头键时使用repaint(); 调用它。我也在考虑有一个参数来绘制,以便它根据它改变它正在绘制的内容。
这是我目前拥有的代码:
//startGame.java
//Version 1.0
//09/06/2016
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
public class Main extends JFrame
{
public static void main(String[] args)
{
final JFrame frame = new JFrame("Display Mode");
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setUndecorated(true);
frame.pack();
frame.setVisible(true);
frame.addKeyListener(new KeyInput());
}
private static class KeyInput implements KeyListener
{
public void keyPressed(KeyEvent ke)
{
if(ke.getKeyCode() == KeyEvent.VK_ESCAPE)
{
System.exit(0);
}
if(ke.getKeyCode() == KeyEvent.VK_RIGHT)
{
//repaint();
}
/*if(ke.getKeyCOde() == KeyEvent.VK_LEFT)
{
} */
}
public void keyTyped(KeyEvent ke)
{}
public void keyReleased(KeyEvent ke)
{}
}
@Override
public void paint(Graphics g)
{
super.paint(g);
ImageIcon player = new ImageIcon("RealPlayersV2.png");
image = player.getImage();
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(image, 187, 245, this);
}
}
在我的私有静态类 Keylistener 等中,我想调用 repaint(); 以便调用我的绘制方法。不幸的是,repaint(); 不能从我的 keylistener 方法这样的静态方法中调用。在按键上使用repaint(); 有什么优雅的解决方案吗?谢谢!
【问题讨论】:
-
所以?不要让你的内部
KeyInput类静态,它不像它可以在其他上下文中重用 - 无论如何它是私有的。 -
KeyInput 必须是静态的,因为它在 main 方法中被引用,它是静态的。
标签: java swing awt paint repaint