下面的代码只是在一个窗口中打开了一个画布,它的内容只是用红色填充。但是,在调整窗口大小时,它会闪烁很多,因为在每次重新绘制之前,画布似乎都会自行清除。经过一些琐碎的搜索后,它似乎是因为update()
调用的方法g.clearRect()
,但我现在已经覆盖了它并且闪烁仍然存在,画布在重新绘制之前仍在清除自身。
我玩过双缓冲,据我所知,这似乎并不能解决问题 - 我不确定它有多大帮助,因为问题似乎更多的是阻止画布清除在重新粉刷之前。
顺便说一句,在每个人都冲进来提出建议之前,我必须在这种情况下使用 Canvas,而不是 JPanel,因为在不同的时间点,我使用相同的 Canvas 来播放 VLCJ 的原生视频。
public class MyCanvas extends Canvas {
@Override
public void update(Graphics g) {
paint(g);
}
@Override
public void paint(Graphics g) {
//By the time we get here, the canvas has been cleared to its background colour
g.setColor(Color.RED);
g.fillRect(0, 0, getWidth(), getHeight());
}
public static void main(String[] args) {
JFrame frame = new JFrame();
MyCanvas c = new MyCanvas();
frame.add(c);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}