Посмотрите на Центральная линия на панели прокрутки . Он центрирует каретку по вертикали, но тривиально центрировать каретку по горизонтали.
Вот код, модифицированный так, что он также центрируется по горизонтали:
public static void centerLineInScrollPane(JTextComponent component)
{
Container container = SwingUtilities.getAncestorOfClass(JViewport.class, component);
if (container == null) return;
try
{
Rectangle r = component.modelToView(component.getCaretPosition());
JViewport viewport = (JViewport)container;
int extentWidth = viewport.getExtentSize().width;
int viewWidth = viewport.getViewSize().width;
int x = Math.max(0, r.x - (extentWidth / 2));
x = Math.min(x, viewWidth - extentWidth);
int extentHeight = viewport.getExtentSize().height;
int viewHeight = viewport.getViewSize().height;
int y = Math.max(0, r.y - (extentHeight / 2));
y = Math.min(y, viewHeight - extentHeight);
viewport.setViewPosition(new Point(x, y));
}
catch(BadLocationException ble) {}
}