所以我创建了一个名为BasePanel的抽象JPanel。在其中我使用双缓冲区代码,如下所示:
public void paint(Graphics g) {
dbImage = createImage(getWidth(), getHeight());
dbg = dbImage.getGraphics();
paintComponent(dbg);
g.drawImage(dbImage, 0, 0, this);
repaint();
}
public void paintComponent(Graphics g) {
g.setColor(Color.BLACK);
}
然后当在另一个面板上扩展它时,我想知道如果我只覆盖paintComponent方法它仍然会加倍缓冲吗?所以我甚至不需要调用paint方法
示例
public class StartScreen extends BasePanel {
@Override
public void paintComponent(Graphics g) {
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.WHITE);
g.drawString("Animation Screen", 175, 150);;
repaint();
}
}
答案 0 :(得分:5)
super.paintComponent(...)
双缓冲自动从父组件继承。
答案 1 :(得分:3)
抱歉,但你的“双缓冲”代码很糟糕。只需覆盖paintComponent即可进行双缓冲。永远不要在paint或paintComponent中调用重绘!除非您想要更改边框和子项的绘制方式,否则不要覆盖绘制。