Hola,
Cita:
Iniciado por karson ... Resumiendo poner un scroll vertical a un panel con flowlayout y que la anchura maxima del panel sea la anchura del scroll, sin embargo la altura la que sea necesaria e incluso se vaya incrementado y el scroll haciendo su trabajo ...
¿Y por qué FlowLayout?
El FlowLayout está hecho para que los controles 'fluyan' de un lado a otro del contenedor y el ancho máximo del contenedor está especificado por el ancho máximo del 'contenedor del contenedor', valga la redundancia. El jScrollPane1 está hecho para que no exista un ancho máximo, es decir, el ancho máximo está especificado por el contenido.
En otras palabras, el de afuera le dice que no hay máximo de ancho y el de adentro se ajusta a eso poniendo todo en una sola fila. Si le pones un ancho máximo al de adentro entonces siempre este se ajustará al mismo aunque el de afuera cambie de tamaño.
Solución ... no usar una herramienta para lo que no está hecha y usar otra que efectivamente hace correctamente y sin complicaciones el objetivo deseado.
Por ejemplo ...
Código Java:
Ver originalimport java.awt.Dimension;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
private javax.
swing.
JPanel jPanel1
;
initComponents();
}
private void initComponents() {
jPanel1
= new javax.
swing.
JPanel();
jPanel1.
setLayout(new java.
awt.
GridLayout(0,
640 / 120)); jScrollPane1.
setHorizontalScrollBarPolicy(javax.
swing.
ScrollPaneConstants.
HORIZONTAL_SCROLLBAR_NEVER); jScrollPane1.
setVerticalScrollBarPolicy(javax.
swing.
ScrollPaneConstants.
VERTICAL_SCROLLBAR_ALWAYS); jScrollPane1.setViewportView(jPanel1);
jScrollPane1.addComponentListener(this);
getContentPane
().
add(jScrollPane1, java.
awt.
BorderLayout.
CENTER);
for (int i = 1; i <= 158; i++) {
button.
setPreferredSize(new Dimension(120,
40)); jPanel1.add(button);
}
pack();
setLocationRelativeTo(null);
}
@Override
if (e.getComponent().getWidth() > 120)
((java.
awt.
GridLayout)jPanel1.
getLayout()).
setColumns( e.getComponent().getWidth() / 120);
jPanel1.doLayout();
}
@Override
}
@Override
}
@Override
}
}
Saludos,