[英]How to Properly Use repaint(); in Java
这是我第一次使用摆动图形,所以请耐心等待。 我当前的目标是在按下其中一个箭头键时更改纹理(以更改我正在使用的图像的方向)。 为此,我创建了一个绘制方法,我想使用repaint();
调用它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();
这样我的paint方法就会被调用。 不幸的是, repaint();
不能从像我的 keylistener 方法这样的静态方法调用。 是否有使用repaint();
优雅解决方案repaint();
在按键上? 谢谢!
您的 Main 类扩展了JFrame
因此它是一个,您应该使用它,而不是像在 main 方法中那样创建一个新的JFrame
。
然后您应该将框架初始化移动到构造函数,这将允许您使KeyListener
不是静态的。 当它不是静态时,您可以调用repaint
方法。
public class Main extends JFrame{
public static void main(String[] args){
new Main();
}
public Main(){
super("Display Mode");
setExtendedState(JFrame.MAXIMIZED_BOTH);
setUndecorated(true);
pack();
setVisible(true);
addKeyListener(new KeyInput());
}
private class KeyInput implements KeyListener{
[...] repaint(); [...]
}
@Override
public void paint(Graphics g){...}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.