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

Formar correcta para JFRAME

Estas en el tema de Formar correcta para JFRAME en el foro de Java en Foros del Web. Que tal gente, estoy estudiando para rendir POO, y estoy viendo el tema de Swing en Java, y eh visto varias maneras de levantar una ...
  #1 (permalink)  
Antiguo 14/02/2008, 10:58
 
Fecha de Ingreso: abril-2007
Mensajes: 77
Antigüedad: 17 años
Puntos: 0
Formar correcta para JFRAME

Que tal gente, estoy estudiando para rendir POO, y estoy viendo el tema de Swing en Java, y eh visto varias maneras de levantar una ventana como un JFrame.

una de ellas es

Código:
public class Pantalla exteds JFrame {

  public static void main(String[] args) {
  
    new Pantalla();
  
  }

  public Pantalla() {

    setSize( 200,100);
    setVisible( true );

  }

}
ahora otra que vi es creando un JFrame dentro de una clase

Código:
public class HolaMundo {

  public static void main() {

    JFrame ventana = new JFrame();

    ventana.setsize(200,200);

    ventana.setvisible(true);

  }

}
MI consulta es cual es correcta, o cual es mejor, tambien vi que el plugins que se le agrega al eclipse Jigoloo crea una clase extendida de JFrame, pero la levanta en un hilo de ejecucion !!

y ahora estoy totalmente mareado ! :D


Gracias
  #2 (permalink)  
Antiguo 14/02/2008, 12:39
Avatar de zempox  
Fecha de Ingreso: mayo-2007
Mensajes: 32
Antigüedad: 17 años
Puntos: 1
Re: Formar correcta para JFRAME

Hola bueno no se si es la forma correcta o no pero a mi me funciona :

import java.awt.Dimension;
import javax.swing.JFrame;

public class pruebita{

JFrame Ventana = null;

public pruebita(){
Dimension d = new Dimension();
d.height = 600;
d.width = 800;
Ventana = new JFrame("Ventana de Prueba");
Ventana.setPreferredSize(d);
Ventana.pack();
Ventana.setLocationRelativeTo(null); //Centrar el JFrame
Ventana.setDefaultCloseOperation(JFrame.DISPOSE_ON _CLOSE);
Ventana.setVisible(true);
}


public static void main (String args[]){
pruebita aplicacion = new pruebita();
}

}//fin de la clase pruebita()


espero te sirva..

http://javazempox.blogs.peru.com/
  #3 (permalink)  
Antiguo 15/02/2008, 11:47
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Re: Formar correcta para JFRAME

Te puedo sugerir la que utiliza Jbuilder, que me resulta muy comoda. Crea dos clases. La primera le Llamare por ejemplo AppEjemplo. La segunda FrmPrincipal. La primera, AppEjemplo, tiene el matodo main que dara inicio a la ejecucion de la aplicacion. Esta sera la encargada de invocar a la Clase FrmPrincipal, que es una clase que extiende de JFrame.

De esta manera has desacoplado la parte visual de la parte de inicialización de la aplicación. es util cuando tambien quieres crear esos forms de inicio que te muestran alguna imagen, o si es necesario inicializar algunas clases o realizar algun tipo de validación.
  #4 (permalink)  
Antiguo 16/02/2008, 01:13
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Formar correcta para JFRAME

Hola:

Te comento mi opinión. Lo más reutilizable es hacer todas tus ventanas como JPanel o un componente que no sea ventana -ni JFrame, ni JDialog, ni JAplet, etc-. El motivo es que de esta forma puedes meter fácilmente tu aplicación hoy en un JFrame y mañana en un JApplet.

Si tienes esto en cuenta, el JFrame sólo se instanciaría para meter el JPanel dentro, por lo que no es necesario hacer una clase que herede de JFrame. Basta con un main() que haga el new del JFrame y del JPanel para meter uno dentro del otro y visualizarlo.

Sin embargo, tienes un problema similar con el JPanel. ¿Es mejor heredar de él o simplemente hacer un new del JPanel y empezar a ponerle cosas?

En ese sentido mi opinión es que heredes de JPanel y en esa clase pongas SOLO la creación de componentes (JButton, List y demás), es decir, solo y exclusivamente lo que es la construcción visual del JPanel. Deja todo el código que realmente hace cosas -algoritmos, consultas a BD, etc, etc- fuera de esa clase. De esta forma, si algún día quieres cambiar la forma de presentación, no deberías tener que tocar lo demás.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 16/02/2008, 07:45
 
Fecha de Ingreso: abril-2007
Mensajes: 77
Antigüedad: 17 años
Puntos: 0
Re: Formar correcta para JFRAME

Gracias por responder, entonces segun lo que veo no hay una forma CORRECTA de hacerlo, sino varias formas para reutilizar el codigo o ser mas prolijo en la creación de GUI, esa era mi duda en si.

Saludos
  #6 (permalink)  
Antiguo 16/02/2008, 14:54
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Re: Formar correcta para JFRAME

Creo que no es completamente correcto decir que no hay una manera correcta.
La manera correcta de instanciar tu aplicación debe ser la siguiente:
Código:
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
No recuerdo exactamente el lugar donde explica el motivo de crear un thread para instanciar tu aplicación. Posiblemente lo encuentro más tarde y lo agrego por aquí.
  #7 (permalink)  
Antiguo 17/02/2008, 10:03
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Formar correcta para JFRAME

Hola:

En java el tema de las ventanas no es seguro para el uso de varios hilos, por lo que SUN aconseja que cualquier cambio en las ventanas se realice en el mismo hilo que se encarga de repintar ventanas. A este hilo se accede con el invokeLater y el new Runnable tal cual has puesto.

Sin embargo, en este caso concreto de instanciar un JFrame y hacerlo visible no estoy tan seguro de que sea realmente necesario, puesto que la ventana todavía no está creada y no es visible, por lo que es dificil que otros hilos puedan acceder simultáneamente a ella.

En cuanto a lo que comenta dieguito01, efectivamente, no es que haya una forma correcta o no. En cualquier caso funcionará. Es simplemente cuestión de si es o no más reutilizable, si realmente quieres que sea reutilizable, si quieres hacerlo más o menos elegante, etc. De todas formas, como coenta HackmanC, sí hay cosas que es necesario saber para el uso correcto de ventanas y evitar problemas de cuelgues o memoria, como lo del invokeLater o el que una aplicación sólo debe tener un JFrame y el resto deben ser JDialog u otro tipo de ventanas, llamar a dispose() para que una ventana la recoja el recolector de basura, etc.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
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 00:30.