Я слышал, что вы говорите. Вы действительно можете перекрасить только участок области. В «Выполнение пользовательских примеров рисования» на веб-сайте Sun я нашел полезный пример, который показывает, как рисовать перетаскиваемый прямоугольник, а затем только перерисовывать эту область, когда мышь перемещается или отпускается.
Вот соответствующий раздел кода ...
public void mouseDragged(MouseEvent e) {
updateSize(e);
}
public void mouseReleased(MouseEvent e) {
updateSize(e);
}
/*
* Update the size of the current rectangle
* and call repaint. Because currentRect
* always has the same origin, translate it
* if the width or height is negative.
*
* For efficiency (though
* that isn't an issue for this program),
* specify the painting region using arguments
* to the repaint() call.
*
*/
void updateSize(MouseEvent e) {
int x = e.getX();
int y = e.getY();
currentRect.setSize(x - currentRect.x,
y - currentRect.y);
updateDrawableRect(getWidth(), getHeight());
Rectangle totalRepaint = rectToDraw.union(previousRectDrawn);
repaint(totalRepaint.x, totalRepaint.y,
totalRepaint.width, totalRepaint.height);
}
Этот код является объектом авторского права (см here for full code and copyright notice)
См here for further example listings
По правде говоря, у меня аналогичная проблема на FPS, но это может быть связано с моим бедным в настоящее время код! За последние несколько месяцев я так многому научился, что теперь могу сделать свой код более эффективным. Надеюсь, я смогу преодолеть проблему FPS, когда более 2 «людей» замедляют мою графику! Hummmm ... Я только реализовал вышеуказанный код для того же раздела в своем коде, а не в других, но непременно попробуй!