Я слышу, что вы говорите.
Вы действительно можете перекрасить только часть области.
В «Выполнении пользовательских примеров рисования» на веб-сайте 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);
}
Этот код защищен авторским правом (полный код и уведомление об авторских правах см. Здесь )
См. здесь для дальнейших примеров списков
По правде говоря, у меня похожая проблема с FPS, но это может быть связано с моим в настоящее время плохим кодом! За последние несколько месяцев я многому научился, и теперь я могу сделать свой код более эффективным. Надеюсь, я смогу преодолеть проблему с FPS, когда более 2 «людей» замедляют мою графику! Hummmm ...
Я только что реализовал приведенный выше код для того же раздела в своем коде, но не для других, но обязательно попробуй!