Foco en componente fuera del jScrollPane

alber
10 de Octubre del 2008
En una aplicacion Swing, tengo una cierta cantidad de campos que exceden el tamaño del panel, por lo cual se activa el scroll, el problema es cuando haciendo foco en cada uno de los campos llego a los que no se pueden visualizar(a pesar de tener foco), lo que necesitaria es que el scroll baje automaticamente y poder ver el campo con foco.

Si alguien sabe, gracias.

garzy
10 de Octubre del 2008
Vale, la solución es sinple, haceer un setValue(x) en la barra de scroll vertical, tomando como valor x la coordenada x del componente. Te explico.

Obtener la barra de scroll vertica:
haces un getVerticalScrollBar en to JScrollPane. Ya tienes la JScrollBar.

Ahora con éste objeto le haces un setValue(x) y la mueves donde quieres, necesitas la coordenada de tu componente.

Averiguar coordenada.
Primero tienes que saber qué componente del panel tiene el foco (se puede hacer de varias maneras, por ejemplo pregunto a tus componentes si tienen el foco (método isFocusOwner).
Ahora que ya sabes el componente haces un getBounds sobre el componente. Te devuelve un objeto Rectangle al cual puedes preguntar el valor de su coordenada x (Rectangle.getX()).

Ese valor se los asignas al setValue() de tu JScrollBar y listo.

Ya me cuentas que tal. Quizás haya una manera automática para no hacer ésto, si alguien la sabe que lo comente, interesa.

Saludos

alber
10 de Octubre del 2008
Gracias!! lo voy a probar.

alber
10 de Octubre del 2008
Funciono perfecto. Gracias de nuevo.

garzy
10 de Octubre del 2008
Jeje, gracias hombe, me alegro de que te haya resultado.