Se me ocurrió que podía crear una clase que heredara de JPanel y que permitiera a otro JPanel contenido en su interior ser redimensionado dentro del primero, pero manteniendo la relación de aspecto. En un principio lo que me parecio sencillo me ha complicado bastante la vida. Resulta que tengo:
Código:
Y aunque está sin acabar, para probarlo llega. Le agregue un par de botones y me puse a redimensionar la ventana y sorpresa, no funciona... Resulta que el evento a componentResized SUPUESTAMENTE se genera después de redimensionar la ventana, pero en este caso parece que se genera antes, pues al redimensionar, los botones toman el tamaño que deberían tener antes de redimensionar la ventana. Así si por ejemplo ejecuto el programa, y redimensiono la ventana al doble de su tamaño, los botones no se mueven; pero si luego la devuelvo a su tamaño, los botones crecen hasta el tamaño que deberían haber tenido antes...public class JResizedPanel extends JPanel implements ComponentListener { private JPanel subPanel = new JPanel(); private int height; private int width; public JResizedPanel ( int height, int width ) { this.height = height; this.width = width; setLayout( null ); addComponentListener( this ); add( subPanel ); } public void componentResized ( ComponentEvent evt ) { int aux1 = getHeight() / height; int aux2 = getWidth() / width; if (aux1 > aux2) { tablero.setBounds( (getHeight() - subPanel.getHeight()) / 2, (getWidth() - subPanel.getWidth()) / 2, aux2 * height, aux2 * width ); } else { tablero.setBounds( (getHeight() - subPanel.getHeight()) / 2, (getWidth() - subPanel.getWidth()) / 2, aux1 * height, aux1 * width ); } } public void componentHidden ( ComponentEvent evt ) { } public void componentMoved ( ComponentEvent evt ) { } public void componentShown ( ComponentEvent evt ) { } public void add( Component comp ){ subPanel.add( comp ); } }
Alguna idea de en que me equivoco?? Alguna idea de otra forma de hacerlo?? Muchisimas gracias y un saludo!!!!