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

[SOLUCIONADO] [Consulta] Extends o instanciar el JFrame

Estas en el tema de [Consulta] Extends o instanciar el JFrame en el foro de Java en Foros del Web. Hola amigos. Estoy trabajando en una aplicación en donde se registraran estudiantes, se crean los grupos y todo eso. Resulta que he creado una clase ...
  #1 (permalink)  
Antiguo 24/12/2013, 13:59
 
Fecha de Ingreso: agosto-2013
Mensajes: 90
Antigüedad: 11 años, 2 meses
Puntos: 1
[Consulta] Extends o instanciar el JFrame

Hola amigos.

Estoy trabajando en una aplicación en donde se registraran estudiantes, se crean los grupos y todo eso.

Resulta que he creado una clase llamada 'Conexion' en donde tengo el método de "conectarDB(String ruta)", lo he hecho así para no escribir tanto código. La clase que requiera conectarse a una DB simplemente hereda de la clase 'Conexion' y utiliza el método.

Tengo una clase que se llama Login en donde comparo los datos de una DB y si se cumple entonces muestra una ventana, es algo simple y me funciona pero tengo la siguiente duda.

Como no existe herencia múltiple en Java me vi en la necesidad de instanciar un JFrame en la clase Login:

Código:
public class Login{

private JFrame jfra_login;

       public Login(){

                jfra_login = new JFrame();

       }

}
Hasta aquí todo bien pero quiero saber si creen que es mas conveniente extends de la clase JFrame y hacer la clase Conexion una interface.

Aparte, he notado que cuando instancio el JFrame, tengo que pasarle al final del construtor el metodo .repaint(); para que se e muestre bien, ya que si no algunos elementos no se visualizan hasta ponerles encima el cursor.

Gracias.
  #2 (permalink)  
Antiguo 25/12/2013, 16:27
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 16 años, 5 meses
Puntos: 127
Respuesta: [Consulta] Extends o instanciar el JFrame

lo mas conveniente y seguro es poner la conecion en una clase aparte y no estendida ya que asi puedes estender JFrame
ademas que simepre las coneciones a base de datos deben de ser lo mas seguras que se pueda
  #3 (permalink)  
Antiguo 25/12/2013, 21:26
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: [Consulta] Extends o instanciar el JFrame

Hola,

Cita:
Iniciado por rodo593 Ver Mensaje
... Hasta aquí todo bien pero quiero saber si creen que es mas conveniente extends de la clase JFrame y hacer la clase Conexion una interface. ...
Técnicamente, un JFrame no es una conexión. Es decir, no tiene ninguna lógica hacer que un Frame implemente un Conection, aún cuando parezca mas fácil desarrollarlo de esa forma.

Código Java:
Ver original
  1. (new MyJFrame()).getConection() // No es fácil de comprender su funcionamiento

Adicionalmente, si deseas verlo de esta forma, la clase Conexión va en la lógica de negocio, y en el peor de los casos en el acceso a datos. La clase JFrame va en la vista o presentación.

Yo te aconsejaría que la clase JFrame solamente tenga sus componentes y métodos para manejar los eventos (aunque normalmente se deberían poner en otra clase a guisa de Controlador). La clase Conexión debería ser independiente y ejecutar sus acciones de forma desacoplada. Quien quita y mañana quieras otro tipo de conexión.

Por supuesto necesitas un ConexiónIntr Interface y un ConexiónImpl Implementation.

Cita:
Iniciado por rodo593 Ver Mensaje
.. Aparte, he notado que cuando instancio el JFrame, tengo que pasarle al final del construtor el metodo .repaint(); para que se e muestre bien, ya que si no algunos elementos no se visualizan hasta ponerles encima el cursor. ..
Seguramente no estas siguiendo el procedimiento correcto, normalmente después de agregar todos los componentes al Frame se utiliza el método pack() de este para actualizar el Layout y por consiguiente actualizar el UI. (En lo personal no aconsejaría usar el método updateUI() que tiene otro objetivo)

Saludos,
  #4 (permalink)  
Antiguo 26/12/2013, 09:55
 
Fecha de Ingreso: agosto-2013
Mensajes: 90
Antigüedad: 11 años, 2 meses
Puntos: 1
Respuesta: [Consulta] Extends o instanciar el JFrame

Cita:
Iniciado por enlinea777 Ver Mensaje
lo mas conveniente y seguro es poner la conecion en una clase aparte y no estendida ya que asi puedes estender JFrame
ademas que simepre las coneciones a base de datos deben de ser lo mas seguras que se pueda
Lo de seguridad con las bases de datos aun lo debo, es la primera vez que trabajo con ellas pero obviamente me interesa aprender este tema de buena manera.
Aparte, aun no domino muy bien el tema ya que por ejemplo, cuando quiero probar mi proyecto en otra pc y creo un .jar ejecutable, siempre pierdo la ruta de la base de datos y se me lía mucho.

¿En términos de seguridad en bases de datos a que te refieres realmente?

Saludos.
  #5 (permalink)  
Antiguo 26/12/2013, 10:04
 
Fecha de Ingreso: agosto-2013
Mensajes: 90
Antigüedad: 11 años, 2 meses
Puntos: 1
Respuesta: [Consulta] Extends o instanciar el JFrame

Cita:
Iniciado por HackmanC Ver Mensaje
Hola,

Técnicamente, un JFrame no es una conexión. Es decir, no tiene ninguna lógica hacer que un Frame implemente un Conection, aún cuando parezca mas fácil desarrollarlo de esa forma.

Código Java:
Ver original
  1. (new MyJFrame()).getConection() // No es fácil de comprender su funcionamiento

Adicionalmente, si deseas verlo de esta forma, la clase Conexión va en la lógica de negocio, y en el peor de los casos en el acceso a datos. La clase JFrame va en la vista o presentación.

Yo te aconsejaría que la clase JFrame solamente tenga sus componentes y métodos para manejar los eventos (aunque normalmente se deberían poner en otra clase a guisa de Controlador). La clase Conexión debería ser independiente y ejecutar sus acciones de forma desacoplada. Quien quita y mañana quieras otro tipo de conexión.

Por supuesto necesitas un ConexiónIntr Interface y un ConexiónImpl Implementation.



Seguramente no estas siguiendo el procedimiento correcto, normalmente después de agregar todos los componentes al Frame se utiliza el método pack() de este para actualizar el Layout y por consiguiente actualizar el UI. (En lo personal no aconsejaría usar el método updateUI() que tiene otro objetivo)

Saludos,
Lo del .pack() no lo sabía, usare el método.

Creo que he entendido tu punto de vista.

Mira, por ejemplo yo he credo el típico ejemplo de la calculadora con GUI. Yo la hice con 2 clases: 1 - Ventana.java, 2 - Eventos.java.
En la primera tengo todos los elementos de la GUI, en esta creo un objeto de la clase eventos:
Código Java:
Ver original
  1. Eventos events = new Eventos(this); // El this es porque el constructor de la clase Eventos trabaja con un JFrame
Luego en la clase Eventos tengo los métodos que ejecutan los botones de la clase Ventana.java

¿Es así como me recomiendas trabajar?

Aparte. Es la primera vez que trabajo con bases de datos, y pues se me hace complicado entender todo lo que me has puesto, pero creo haber entendido, me recomiendas ordenar las cosas así:

Venatana.java (GUI) > Eventos.java(Maneja los eventos de la GUI) > Conexion.java (Implementa la conexion a la clase Eventos)

Saludos y gracias por responder.
  #6 (permalink)  
Antiguo 26/12/2013, 11:32
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: [Consulta] Extends o instanciar el JFrame

Hola,

Cita:
Iniciado por rodo593 Ver Mensaje
... Mira, por ejemplo yo he credo el típico ejemplo de la calculadora con GUI. Yo la hice con 2 clases: 1 - Ventana.java, 2 - Eventos.java.

¿Es así como me recomiendas trabajar?
...
Personalmente siempre trabajo de esa forma, no solo estas aplicando MVC, lo cual tiene muchas ventajas, sino que adicionalmente estas pensando en ser escalable.

La única diferencia es que no le paso en el constructor la instancia del JFrame, sino que agrego los Listeners con addListener, e implemento los Listeners necesarios. No es que sea muy común pero eso me da otra ventaja y es que, uno o más Listeners pueden escuchar los eventos del mismo botón.

A presionar un botón puedo o no, realizar dos actividades diferentes, dependiendo si alguna otra clase se adjunto a recibir los mismos eventos del mismo botón.

Pero en algunos casos simples es más fácil hacerlo de la forma como inidicaste, y no es necesario toda esa estructura, normalmente es en aplicaciones mucho mas grandes, que tienen que ser mas adaptables a cualquier cosa, y que te cambian los requerimientos a cada rato.

Cita:
Iniciado por rodo593 Ver Mensaje
... Aparte. Es la primera vez que trabajo con bases de datos, y pues se me hace complicado entender todo lo que me has puesto, pero creo haber entendido, me recomiendas ordenar las cosas así:

Venatana.java (GUI) > Eventos.java(Maneja los eventos de la GUI) > Conexion.java (Implementa la conexion a la clase Eventos)
La Conexión no tiene nada que ver con Eventos ni Ventana, la conexión es una clase aparte que funciona independientemente de todos los demás componentes de forma desacoplada.

Cada vez que abres una conexión vas a usar:

ConectionIntr c = new ConectionImpl();

En el mejor de los casos lo va a crear con singletón:

ConectionIntr c = ConectionImpl.getConection();

Lo único que hace conexión es crear conexiones, allí no implementas ningún tipo de acceso a datos. Aparte, posiblemente, necesitas un DataAccess donde tengas Insert, Update, Delete, etc. Y casi obligatoriamente un Java Bean con los datos que vas a pasar a cada uno de los métodos anteriores.

Código Java:
Ver original
  1. Insert(String nombre, String apellido){}

Normalmente se debería de realizar así:

Código Java:
Ver original
  1. Insert(Usuario usuario){}

Mas adelante al usuario le podrías agregar el teléfono y la compatibilidad binaria de todas las clases no se ve interrumpida, es decir, no le tienes que agregar un parámetro adicional a los métodos, sino simplemente agregar un field a la clase Usuario.

Mas adelante podrías investigar sobre el patrón Factory.

Saludos,
  #7 (permalink)  
Antiguo 26/12/2013, 14:57
 
Fecha de Ingreso: agosto-2013
Mensajes: 90
Antigüedad: 11 años, 2 meses
Puntos: 1
Respuesta: [Consulta] Extends o instanciar el JFrame

Cita:
Iniciado por HackmanC Ver Mensaje
......
Muchas gracias por tu respuesta, muy completa y realmente de mucha ayuda.

Haré las cosas como me has indicado, ya que viéndolo bien es mejor y realmente me ha gustado.

Saludos.
  #8 (permalink)  
Antiguo 26/12/2013, 15:24
 
Fecha de Ingreso: agosto-2013
Mensajes: 90
Antigüedad: 11 años, 2 meses
Puntos: 1
Respuesta: [Consulta] Extends o instanciar el JFrame

Cita:
Iniciado por HackmanC Ver Mensaje
Por supuesto necesitas un ConexiónIntr Interface y un ConexiónImpl Implementation.
Disculpa que te moleste de nuevo, pero con esto a que te refieres realmente.

Es que en el otro ejemplo pusiste tampoco lo entiendo:
Código:
ConectionIntr c = new ConectionImpl();
  #9 (permalink)  
Antiguo 26/12/2013, 20:13
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: [Consulta] Extends o instanciar el JFrame

Hola,

Cita:
Iniciado por rodo593 Ver Mensaje
...
Es que en el otro ejemplo pusiste tampoco lo entiendo:
Código:
ConectionIntr c = new ConectionImpl();
Simplemente es una Interfaz y una Clase de Implementación, mas adelante podrías tener un ConnectionPooledImpl o ConnectionSuperDuperImpl, y no tendrías que cambiar mas que el new algo(). A eso me refería con que mas adelante puedes averiguar sobre el patrón Factory, de allí queda que investigues sobre esos temas.

Saludos,
  #10 (permalink)  
Antiguo 27/12/2013, 09:45
 
Fecha de Ingreso: agosto-2013
Mensajes: 90
Antigüedad: 11 años, 2 meses
Puntos: 1
Respuesta: [Consulta] Extends o instanciar el JFrame

Cita:
Iniciado por HackmanC Ver Mensaje
Hola,



Simplemente es una Interfaz y una Clase de Implementación, mas adelante podrías tener un ConnectionPooledImpl o ConnectionSuperDuperImpl, y no tendrías que cambiar mas que el new algo(). A eso me refería con que mas adelante puedes averiguar sobre el patrón Factory, de allí queda que investigues sobre esos temas.

Saludos,
Muchisimas gracias HackManC, me has aclarado muy bien las dudas que tenía, ahora me toca dar de mi parte e investigar.
Doy el tema por solucionado, saludos.

Etiquetas: clase, extends, instanciar, jframe, metodo
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 15:44.