我最近一直在练习 java 的 swing 特性,在我的一个扩展类 JPanel 的类中,我重写了方法 paintComponent()
以便它将我的 BufferedImage 绘制到 JPanel 上.我也有一个方法可以四处移动。在这个问题之前,我遇到了一个问题,它显示了移动过程,因为它重绘得太快了。因此,我创建了一个名为 available
的 boolean 变量,当图像仍在移动过程中时将其设置为 false。但是,现在我看到屏幕正在拿走整个图像并将其放回去,导致它闪烁。这是我的基本伪代码:
class A extends JPanel{
BufferedImage canvas;
public A(){
//create image here
}
public move(){
available = false;
//move things around in here
available = true;
}
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
if(available){
g.drawImage(this.canvas, 0, 0, null);
}
g.dispose();
}
}
class B{
public static void main(String[] args){
//construct the class A JPanel
while(some_variable){
class_A_JPanel.repaint();
}
}
}
最佳答案
这是一个非常古老的话题,在现代 Java 中得到了解决。但是您更喜欢旧方法然后使用旧技术。例如Double Buffering
关于java - Swing - 停止图像闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29932544/