雙緩衝原理:在內存 BufferedImage 繪製完整幀,再一次性繪製到屏幕,避免直接繪製導致的閃爍與撕裂。Swing 組件預設開啟雙緩衝 (JComponent.setDoubleBuffered(true)),自定義繪圖可手動實現。
// 離屏緩衝圖像
BufferedImage offscreen = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = offscreen.createGraphics();
// 繪製背景、圖片、邊框...
g2d.drawImage(image, x, y, null);
g2d.dispose();
// paintComponent 中直接繪製緩衝圖
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (offscreen != null) g.drawImage(offscreen, 0, 0, null);
}
// 滑鼠拖拽更新坐標並重繪
public void mouseDragged(MouseEvent e) {
x = e.getX() - offsetX;
y = e.getY() - offsetY;
// 更新緩衝圖中的圖片位置
repaint();
}
進階:使用 VolatileImage 利用顯存加速,或 BufferStrategy (全屏獨佔模式) 實現頁面翻轉。現代 Swing 應用通常依賴組件內建雙緩衝,僅在複雜場景 (遊戲循環、大量圖元) 需手動管理。