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:

Imagen

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top