JSCrollPanes ScrollBars no aparecen
-
26-10-2019 - |
Pregunta
Entonces, tengo un diseño de cuadrícula que almacena JSCrollPane en cada celda. Estos también se ponen en una matriz para otros fines. La "vista" extiende "JPanel", por lo que es solo un panel normal con soporte de imagen. La aplicación se inicia con celdas llenas de scrollpane que contienen la vista que aún no tiene una imagen.
En ese momento no veo ninguna barra de desplazamiento, pero eso no importa, ya que no hay nada dentro del jpanel. Tan pronto como abro una imagen y uso DrawImage en el PaintComponet del jpanel, no veo aparecer de Scrollbar. Así es como creo la cuadrícula y el scrollpane
private void createContentPane()
{
GridLayout gridLay = new GridLayout(GRID_ROWS, GRID_COLUMNS);
perspectiveTbl = new JScrollPane[NUM_PERSPECTIVE];
mainPane = new JPanel();
mainPane.setLayout(gridLay);
int idx = 0;
while(idx < perspectiveTbl.length)
{
perspectiveTbl[idx] = new JScrollPane(new View(modelImage));
mainPane.add(perspectiveTbl[idx]);
idx++;
}
this.getContentPane().add(mainPane, BorderLayout.CENTER);
}
No estoy exactamente seguro de por qué no aparecen los barras de desplazamiento, ¿deberían haberse configurado dentro del panel para la imagen?
Aquí hay una imagen de la aplicación, ya que puede ver que la imagen del zapato no recibe Scrollbar's, por lo que no hay forma de ver el resto de la imagen:
Solución 2
Gracias por la pista Stanislav, en realidad lo descubrí y lo hice funcionar hace una hora, pero diste el camino correcto para arreglarlo con el atributo de sesión preferido. Terminé reimplementé GetPreferedSize con el tamaño de la imagen dentro del panel, agregé revalidar al evento de pintura para que las barras aparezcan tan pronto como se cargue la imagen.
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(image, 0, 0, null);
this.getViewScrollPane().revalidate();
}
public Dimension getPreferredSize()
{
if(image != null)
return new Dimension(image.getWidth(),image.getHeight());
else
return super.getPreferredSize();
}
Otros consejos
Puede usar usuarios no jpanel con imagen pero habitual jlabel con la imagen
o
llamar setPreferredSize()
Para que los paneles reflejen el tamaño de la imagen.