Sì. Tramite un AdjustmentListener:
codice:
import java.awt.event.*;
import javax.swing.*;
public class Sincronizzatore implements AdjustmentListener {
JScrollBar v1, h1, v2, h2;
public Sincronizzatore(JScrollPane sp1, JScrollPane sp2) {
v1 = sp1.getVerticalScrollBar();
h1 = sp1.getHorizontalScrollBar();
v2 = sp2.getVerticalScrollBar();
h2 = sp2.getHorizontalScrollBar();
}
public void adjustmentValueChanged(AdjustmentEvent e) {
JScrollBar scrollBar = (JScrollBar)e.getSource();
int value = scrollBar.getValue();
JScrollBar target = null;
if(scrollBar == v1)
target = v2;
if(scrollBar == h1)
target = h2;
if(scrollBar == v2)
target = v1;
if(scrollBar == h2)
target = h1;
target.setValue(value);
}
}
Come si usa:
codice:
JScrollPane jsp1 = ...;
JScrollPane jsp2 = ...;
Sincronizzatore sinc = new Sincronizzatore(jsp1, jsp2);
jsp1.getHorizontalScrollBar().addAdjustmentListener( sinc );
jsp1.getVerticalScrollBar().addAdjustmentListener( sinc );
jsp2.getHorizontalScrollBar().addAdjustmentListener( sinc );
jsp2.getVerticalScrollBar().addAdjustmentListener( sinc );
Chiaramente questo serve a sincronizzare entrambe le scrollbar (orizzontale e verticale)... se a te basta la verticale, aggiusta pure il codice di conseguenza. 
Ciao.