Leader has fixed the slow zoom!!!! XD
Finally, I know that the real problem lies in the setting of rendering hints when drawing the pieces.
Seb has changed :
gg.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BICUBIC);
to
gg.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
gg.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_OFF);
gg.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_SPEED);
gg.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING,
RenderingHints.VALUE_COLOR_RENDER_SPEED);
gg.setRenderingHint(RenderingHints.KEY_DITHERING,
RenderingHints.VALUE_DITHER_DISABLE);
and it works.... well~
XD
And as an alternative of the scroll bar problem, Seb has added the function to move all the pieces, so, even the size of the scroll pane does not grow, the pieces will still be shifted to position that can be seen.
private void dragAll (MouseEvent e)
{
Iterator iter = zOrder.iterator();
Iterator xIter = offsetX.iterator();
Iterator yIter = offsetY.iterator();
while (iter.hasNext())
{
Piece piece = (Piece) iter.next();
Integer ox = (Integer) xIter.next();
Integer oy = (Integer) yIter.next();
int prevX = piece.getPuzzleX();
int prevY = piece.getPuzzleY();
int prevW = piece.getCurrentWidth();
int prevH = piece.getCurrentHeight();
piece.moveTo (e.getX()- ox.intValue(), e.getY()- oy.intValue());
repaint(0, prevX, prevY, prevW, prevH);
repaint(0, piece.getPuzzleX(), piece.getPuzzleY(),
piece.getCurrentWidth(), piece.getCurrentHeight());
}
}
The ghost image will be scaled according to the zoom as well.