Даже если это больше работы, я рекомендую для любой такой задачи, что вы только отменяете и перерисовываете регион, который изменился. Это сэкономит много циклов (представьте, что вы рисуете весь фон целиком ...).
Вы увидите большие улучшения.
EDIT
Я сам проверил это на этом примере
public void mouseMoved(MouseEvent e) {
repaint(mouseX, mouseY, 20, 20);
mouseX = e.getX();
mouseY = e.getY();
repaint(mouseX, mouseY, 20, 20);
}
и должен признать, что улучшения немного академичны (по крайней мере, для моего компьютера). В любом случае, эту технику следует использовать для более сложных методов рисования .. (где вы, наконец, увидите улучшения)
EDIT
И еще обман: если вам все еще не нравится несоответствие между тем, где, по вашему мнению, находится курсор, и тем, что думает система, попробуйте отключить курсор (http://www.java2s.com/Code/Java/2D-Graphics-GUI/HidethemousecursoruseatransparentGIFasthecursor.htm), чтобы дать пользователю лучшую обратную связь.