Delimitar Panel con scroll y FlowLayout

Iniciado por karson, 28 Mayo 2011, 01:37 AM

0 Miembros y 1 Visitante están viendo este tema.

karson

Hola, veamos si me puedo explicar bien.

Tengo un Frame con lo siguiente:
Hay un panel en el que voy añadiendo un componente creado por mi que representa una diapositiva. El layout que tiene es FlowLayout.
Como pueden ir muchas deseo ponerle un scroll vertical (solo vertical)
Entonces creo el Jscrollpane le configuro para que solo tenga scroll vertical, le situó en el Frame y digo que su setViewportView sea el panel con el flowlayout.

Ahora comienzan los problemas, deseo que a medida que voy añadiendo diapositivas, estas se vayan colocando en el panel FlowLayout y cuando no entren bajen a la fila de abajo. Como lo tengo siguen indefinidamente hacia la derecha... como si el panel fuera infinito. (pero repito que no quiero scroll horizontal)
Me gustaria saber como puedo delimitar la anchura del flowlayout.
Lo logre hacer, pero entonces el scroll no me funcionaba correctamente.

Y para complicarlo un poco mas, lo logre hacer mas o menos chapuceramente, el problema es que en el momento que redimensionaba la ventana dejaba todo de funcionar. (por poner dimensiones al setpreferensize manualmente).

Alguien sabe la manera rápida y simple de hacer lo que pido?
Si hay dudas puedo explicar y aportar el código que sea necesario.
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

Gracias!!

NetJava

#1
Buenas, a ver si esto te sirve, yo siempre utilizo GridBagLayout, aunque sea algo simple, en esa forma para ordenar los elementos que introduzca meto el Scroll, te pongo un ejemplo, que debería funcionar para cualquier componente que pueda tener escroll, así lo he comprobado hasta ahora. Scroll vertical!

Código (Java) [Seleccionar]


private GridBagConstraints constraints = new GridBagConstraints();
private JPanel jpnl_mijpanel = new JPanel();


jpnl_mijpanel.setLineWrap(true); //Anula el Scroll horizontal.

this.getContentPane().setLayout(new GridBagLayout());

//Simplemente se introduce el componente en un lugar determinado. Funciona como si fuera una matriz blablablabla donde se van colocando los elementos blablablabla y la matriz es dinámica blablablabla XD.
constraints.gridx =1; // Columna.
constraints.gridy = 9; //Fila.
constraints.gridwidth =1; //Ocupa columna.
constraints.gridheight =1; //Ocupa fila.
constraints.weighty = 0.25; //La fila se estira de arriba a abajo.
constraints.weightx = 1.0; //La fila se estira a los lados.
constraints.fill = GridBagConstraints.BOTH;
this.getContentPane().add(new JScrollPane(jpnl_mijpanel),constraints);//Se pone el Scroll a cualquier componente que lo //pueda tener!!!


No se si es lo que pides y si lo es espero que no te salten los errores que te daba. Lo has pedido en un FlowLayout, jajajaja yo te doy mi respuesta en un GridBagLayout XD Saludos

karson

Muchas gracias!! Lo tendré en cuenta para ocasiones futuras.
Yo lo implemente con un gridlayout y reescribiendo su método resize, y controlando cuantos elementos me entran cambio el numero de columnas y redibujo. Me va bastante bien y responde muy rápidamente, asiq por el momento no lo toco.

Muchas gracias por la respuesta!!
Un saludo! ;)