Foros del Web » Programación para mayores de 30 ;) » Java »

JPanel en Java que mantiene relacion de aspecto

Estas en el tema de JPanel en Java que mantiene relacion de aspecto en el foro de Java en Foros del Web. Hola!! Veréis, me ha tocado implementar un buscaminas en Java y me he topado con un pequeño contratiempo: Cuando la ventana se crea el tablero ...
  #1 (permalink)  
Antiguo 03/06/2010, 15:24
 
Fecha de Ingreso: febrero-2008
Mensajes: 16
Antigüedad: 16 años, 9 meses
Puntos: 0
JPanel en Java que mantiene relacion de aspecto

Hola!! Veréis, me ha tocado implementar un buscaminas en Java y me he topado con un pequeño contratiempo: Cuando la ventana se crea el tablero tiene un tamaño predeterminado, pero al redimensionarla, el tablero cambia de forma por culpa del Layout.

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:
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 );
    }
}
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...

Alguna idea de en que me equivoco?? Alguna idea de otra forma de hacerlo?? Muchisimas gracias y un saludo!!!!

Etiquetas: jpanel
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:19.