Вам нужно использовать легкий JPanel и 2 тяжелых объекта, таких как:
JPanel foreground = new JPanel();
Panel frame = new Panel();
Cavas canvas = new Cavas();
foreground.add(frame);
frame.add(canvas);
Тяжелые объекты могут быть AWT, SWT (с OLE) или смешанными, это не имеет значения.
Затем получите JScrollPane и добавьте AdjustmentListener, который вызывает такой метод, как:
private void updateLocation() {
final JScrollPane scroll = getScrollPane();
if (null == scroll) {
// do nothing
return;
}
final Point top = getLocation();
final Rectangle visible = getVisibleRect();
// set up new location
frame.setSize(visible.width, visible.height);
frame.setLocation(visible.x - top.x, visible.y - top.y);
canvas.setSize(getWidth(), getHeight());
canvas.setLocation(top.x - visible.x, top.y - visible.y);
}