Foros del Web » Programación para mayores de 30 ;) » Java »

JScrollPane no me muestra scroll vertical

Estas en el tema de JScrollPane no me muestra scroll vertical en el foro de Java en Foros del Web. Buenas, Estoy haciendo un sistema de gestion de turnos y para ello cree un componente, extendiendo de JScrollPane. Por cada entrada de este componente agenda, ...
  #1 (permalink)  
Antiguo 29/07/2012, 10:28
Avatar de ezefarina  
Fecha de Ingreso: junio-2009
Mensajes: 91
Antigüedad: 15 años, 5 meses
Puntos: 2
Pregunta JScrollPane no me muestra scroll vertical

Buenas,
Estoy haciendo un sistema de gestion de turnos y para ello cree un componente, extendiendo de JScrollPane. Por cada entrada de este componente agenda, creo un JLabel, uno encima de otro (JLabel.Y = labelHeight*i). El problema que tengo es que cuando el alto de esta lista de labels, excede el alto del JScrollPane que la contiene, el JScrollPane no muestra su scroll vertical. Supongo que estoy haciendo algo mal, pero si es así, desconozco que es. A alguien se le ocurre algo ? sería de mucha ayuda

Muchisimas gracias
  #2 (permalink)  
Antiguo 29/07/2012, 11:29
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 2 meses
Puntos: 454
Respuesta: JScrollPane no me muestra scroll vertical

Hola:

Hay dos temas importantes.

Uno es que el JScrollPane entiende del tamaño de su viewPortview. Si no le añades un único componente (normalmente un JPanel si quieres algo más complejo que un solo componente) con el método setViewportView() o en el constructor de JScrollPane, el JScrollPane no tiene ni idea del tamaño de los componenentes ni sabe si tiene que mostrar scroll ni nada. No sé si lo haces así, pero deberías añadir un único JPanel al JScrollPane con los métodos indicados (el add() no vale) y añadir a ese JPanel los JLabel.

El segundo tema importante es que un JScrollPane pregunta el getPreferredSize() al JPanel o al componente que sea y el JPanel pregunta el getPreferredSize() a su layout y el layout lo calcula con todos los componentes (JLabel) que tiene dentro. Lo de JLabel.Y = labelHeight*i me hace pensar que estás usando un layout null y fijando el tamaño de los componentes a pelo. Si lo haces así, debes también sobrescribir el método getPreferredSize() del JPanel para que devuelva el tamaño total en pixels que quieres. De esta forma, el JScrollPane sabrá si necesita o no poner scroll vertical (y horizontal) y de qué tamaño. O bien, cada vez que añadas un JLabel, llamar al método setPreferredSize() del JPanel con su nueva dimensión total.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 29/07/2012, 11:42
Avatar de ezefarina  
Fecha de Ingreso: junio-2009
Mensajes: 91
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: JScrollPane no me muestra scroll vertical

Gracias chuidiang, impecable respuesta. Cambiaré el extends por JPanel, sobreescribire el getPreferredSize para que devuelva labelHeight*i, e introduciré el JPanel en un JScrollPane

Muchisimas gracias !!

Etiquetas: jscrollpane, scroll, swing, vertical
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:19.