Foro de elhacker.net

Programación => Java => Mensaje iniciado por: theluigy13etv en 16 Septiembre 2012, 20:59 pm



Título: Necesito algunas sugerencias para realizar un Sistema de Matrícula en Java
Publicado por: theluigy13etv en 16 Septiembre 2012, 20:59 pm
Hola, quería hacerles una pregunta. Estoy pensando hacer un sistema de matrícula utilizando Java pero tengo una pequeña duda. Un profe me dijo que en todo proyecto en Java solo debe haber un único Formulario JFrame y varios JDialogs. Del JFrame llamas a los JDialog y los JDialogs se llaman entre ellos.

Para hacer mi sistema de matrícula necesito al principio una ventana que me pida ingresar USUARIO y CONTRASEÑA, y luego recién que aparezca la VENTANA PRINCIPAL desde donde puedo acceder a las diferentes opciones como CONSULTA, REGISTRO, BÚSQUEDAS, ETC....

Mi duda está en que no sé cuál será el Formulario tipo JFrame, ¿El primer formulario que me pide loggearme?? o ¿¿la VENTA PRINCIPAL de mi aplicación??

Yo estuve pensando en que mi VENTANA PRINCIPAL debía ser mi JFrame, pero en ese caso mi ventana de inicio de sesión sería el JDialog, debido a que la ventana de inicio de sesión debe ir antes que la VENTANA PRINCIPAL tendría que llamar desde un JDIALOG a un JFRAME y según lo que me dijo mi profe eso estaría mal.

Lo segungo que pensé era hacer que mi ventana loggeadora sea un JFrame y que mi VENTANA PRINCIPAL junto a las otras sean JDialog pero como que esa idea no me cuadra porque mi ventana principal es se supone la "principal" y por tanto debería ser un JFRAME.

Espero me deje entender. ¿Alguna sugerencia o alguien que me aclare un poco?


Título: Re: Necesito algunas sugerencias para realizar un Sistema de Matrícula en Java
Publicado por: sapito169 en 17 Septiembre 2012, 05:52 am
mira des pues de un poco de intenten-tos llegue a una solución definitiva que soluciona elegantemente el problema descrito pero es muy complicado de entender para un prinsipante disculpa que el código este desordenado pero es que lo escribí de madrugada

mira esta solución es buena por que permite que ninguna clase sepa de la existencia de otra es decir un buen desacoplamiento

ademas si no lo haces de esta forma tu programa jamas se serrara ocupara recursos y luego como es costumbre se le echara la culpa al lenguaje diciendo que java es lento

Código
  1. package com.ejemplo;
  2.  
  3. import javax.swing.JFrame;
  4. import javax.swing.WindowConstants;
  5.  
  6. public class Main {
  7. public static void main(String[] args) {
  8. Sitema sitema = new Sitema();
  9. final PanelCredensiales panelCredensiales = new PanelCredensiales(sitema);
  10. panelCredensiales.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
  11. panelCredensiales.setVisible(true);
  12. final JFrame jFrame = new JFrame();
  13. jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  14. System.out.println("xd");
  15. sitema.ingresoCorrecto(new EventoIngreso() {
  16.  
  17. @Override
  18. public void accion() {
  19. jFrame.setVisible(true);
  20. panelCredensiales.dispose();
  21. }
  22. });
  23.  
  24. }
  25. }
  26.  
Código
  1. package com.ejemplo;
  2.  
  3. public abstract class EventoIngreso {
  4. protected abstract void accion();
  5. }
  6.  
Código
  1. package com.ejemplo;
  2.  
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5.  
  6. import javax.swing.JButton;
  7. import javax.swing.JDialog;
  8. import javax.swing.JLabel;
  9. import javax.swing.JTextField;
  10.  
  11. public class PanelCredensiales extends JDialog {
  12.  
  13. private final JLabel lblUsuario = new JLabel("usuario");
  14. private final JLabel lblClave = new JLabel("clave");
  15. private final JTextField txtClave = new JTextField();
  16. private final JTextField txtUsuario = new JTextField();
  17. private final JButton btnAceptar = new JButton("btnAceptar");
  18. private final Sitema sitema;
  19.  
  20. public PanelCredensiales(Sitema sitema) {
  21. this.sitema = sitema;
  22. intiUi();
  23. }
  24.  
  25. private void intiUi() {
  26. setLayout(null);
  27. setSize(150, 200);
  28.  
  29. lblUsuario.setBounds(10, 10, 100, 10);
  30. getContentPane().add(lblUsuario);
  31.  
  32. txtUsuario.setBounds(110, 30, 100, 20);
  33. getContentPane().add(txtUsuario);
  34.  
  35. txtClave.setBounds(110, 10, 100, 20);
  36. getContentPane().add(txtClave);
  37.  
  38. lblClave.setBounds(10, 30, 100, 10);
  39. getContentPane().add(lblClave);
  40.  
  41. btnAceptar.setBounds(60, 60, 50, 20);
  42. getContentPane().add(btnAceptar);
  43.  
  44. btnAceptar.addActionListener(new ActionListener() {
  45.  
  46. @Override
  47. public void actionPerformed(ActionEvent e) {
  48. sitema.ingresoCorrecto();
  49.  
  50. }
  51. });
  52. }
  53.  
  54. }
  55.  
  56. [code]
  57. package com.ejemplo;
  58.  
  59. public class Sitema {
  60. private EventoIngreso eventoIngreso;
  61. public void inicio(){
  62.  
  63. }
  64.  
  65. public void ingresoCorrecto() {
  66.  
  67. eventoIngreso.accion();
  68. }
  69.  
  70. public void ingresoCorrecto(EventoIngreso eventoIngreso) {
  71. this.eventoIngreso=eventoIngreso;
  72.  
  73. }
  74. }
  75.  
[/code]


Título: Re: Necesito algunas sugerencias para realizar un Sistema de Matrícula en Java
Publicado por: ChavalChavito en 18 Septiembre 2012, 06:15 am
Tal cual lo dijo tu profesor, esa es la manera correcta de hacerlo.. utilizas el modal!!
desde el jframe (formulario principal d tu sistema) vas llamando a jdialogs, lo cual implica q qedan bloqeadas las demas ventanas..

CASOS DE USO:

Citar
*Llamando la atención sobre piezas vitales de información. Este uso ha sido criticado por ineficaz porque los usuarios son bombardeados con cuadros de diálogo de más, y habituar a simplemente hacer clic en "Cerrar", "Cancelar" o "Aceptar" sin leer o entender el mensaje.
*El bloqueo de flujo de la aplicación hasta que la información necesaria para continuar se introduce, como por ejemplo una contraseña en un inicio de sesión proceso. Otro ejemplo son los cuadros de diálogo de archivos para abrir y guardar archivos en una aplicación.
*Recogida de opciones de configuración de aplicaciones en un diálogo centralizado. En tales casos, por lo general los cambios se aplican al cerrar el diálogo y el acceso a la aplicación se desactiva mientras las modificaciones se están realizando.
*Advertencia de que los efectos de la acción actual no son reversibles. Este es un frecuente patrón de interacción para los diálogos modales, pero también es criticado por los expertos en usabilidad como ineficaces para su uso previsto (protección contra errores en acciones destructivas) debido a la habituación. En realidad lo que la acción reversible (que proporciona un "deshacer" opción) se recomienda en su lugar.
El login lo puedes hacer c un jdialog ...