Если вы используете Swing, вы можете использовать встроенную двойную буферизацию: http://java.sun.com/products/jfc/tsc/articles/painting/#db
Если вы реализуете свой собственный рендеринг, вот несколько советов:
Двойная буферизация в основном означает, что у вас есть два буфера рисования, в которые вы поочередно записываете, пока отображается другой.
В вашем случае вы можете использовать изображение, чтобы нарисовать игровой контент, а затем нарисовать это изображение в компоненте. Это должно дать вам двойную буферизацию в некотором смысле. Вы можете использовать два изображения, которые вы меняете, чтобы уменьшить одновременный доступ, то есть одно будет «передним» буфером, который отображается, а другое - «обратным» буфером, к которому вы рисуете.
Тем не менее, я настоятельно рекомендую не реализовывать это самостоятельно. Вместо этого вам следует попробовать использовать одну из существующих 2D-библиотек (например, Swing) или 3D-библиотеки (например, OpenGL с JOGL или LWJGL в качестве привязок Java - обратите внимание, что это не обязательно должно быть 3D с OpenGL). В качестве альтернативы вы также можете найти игровой движок, там их много.