style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

¿Por que java es tan dificil para manejar mas de 2 ventanas?.... opiniones

Pues bien este tema es mas que nada para recibir sus consejos
Y bien el planteamiento es as así:
Imaginemos una aplicación que sera usada por 3 tipos de usuarios , un administrador, personal d una escuela y alumnos ,un administrador agregara empleados, los empelados entre otras cosas agregaran materias,calificaciones,grupos, etc...., los alumnos consultaran sus materias y calificaciones.
Pues bien lo que hize fue
1. un JFrame principal con un JDesktopPane donde agrego cada una de las demás ventas
2.- como serian varias ventanas(JInternalFrames) se me ocurrió que cada ventana fuera una clase diferente
3.- la primer ventana que ve mi usuario es un JInternalFrame que tiene tres botones para saber que tipo de usuario es , cada que un usuario cierre su sesión tiene que volver a esta por lo cual esta se me ocurrió un setvisible(false) y luego un setvisible(true) para cuando la quiera mostrar de nuevo.
4.- imaginemos que el usuario es de tipo empleado , la pantalla principal para este usuario sera un JInternalframe con un JMenu con la opción de agregar calificación,grupos,agregar alumnos, eliminar y modificar cada uno de los anteriores, en total 9 ventanas diferentes pero compartiendo todas el mismo JMenu entonces para no batallar tanto se me ocurrió otra vez una clase por cada una que pintara unos JInternalframe con el mismo menú pero diferentes cajas de texto,labels y botones.
Al final me quedo una aplicación que crea nuevas instancias por todos lados, con ventanas ocultas dentro de otra que ya ni se en realidad cuantas ocultas están, la cuestión es que resolví mi problema y mi aplicación funciona pero según yo no es eficiente.
Ahora el tema de discucion es , ¿ es correcto lo que hice?,¿ hay una mejor manera de hacerlo?, ¿como manejan ustedes mas de 2 ventanas dentro de la misma aplicación?

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

MVC

Tiene mucho que no hago una aplicación de escritorio para Java, y las que he hecho generalmente son cosas muy sencillas que usan una sola ventana. Lo que no entiendo es para qué usar ese esquema de JInternalFrame; si son 3 tipos de usuario, pues casi casi son 3 apps distintas, por qué no tener 3 JFrames independientes? Solamente vas a mostrar uno a la vez, no? Son prácticamente 3 aplicaciones distintas, que van a compartir ciertos componentes seguramente nada más.

Si hoy tuviera que hacer una aplicación de escritorio, seguramente utilizaría Griffon.

Imagen de puzzlemaniaco

¿por que uso ese esquema ? ,

¿por que uso ese esquema ? , pues veras soy estudiante y en la escuela nos enseñan o mas bien nos dicen que solo debe haber un JFrame, y dentro todo,sobre griffon gracias por la orientación pero creo que lo dejare para cuando tenga mas conocimientos lo veo complicado de momento, entonces creo me decantare por la opción de los 3 frames. A manera de hacer un poco mas claro adjunto el jar de que es lo que he realizado

https://www.box.com/s/6fdbd8e1e9469ba8aaa3

De igual manera no se , sigo sin entender por que se complica tanto el manejo de ventanas por que no basta con un visible(false) visible(true) al estilo de vb o mejor aun como las paginas html.
De cualquier manera gracias y empezare a adaptar todo a los frames

Imagen de ingscjoshua

Dificil?

MMM como ezamudio Cita es MVC lo que necesitas y ufff siglos tiene que no veo un app con swing y pues nose si haberla hecho de escritorio sea lo mejor creo que hoy las personas estan mas acostumbrados a usar un navegador quizas pudo haber sido web.

Imagen de puzzlemaniaco

bueno veras no es que este

bueno veras no es que este haciendo algo comercial o que espere un pago de ello, es mas que nada un proyecto para tratar de aprender mas allá de lo que nos enseñan en la escuela, la verdad me gustaría hacerlo web pero no cuento con los conocimientos ni un punto de partida.
Por eso estoy empezando desde lo basico

Imagen de ingscjoshua

OK

Pues esta bien aunque swing y awt son tecnologias casi muertas si bien Griffon trata de salvar esa parte del escritorio que esta casi olvidada.
Esta bien aprender desde las bases y que bien que demuestres interes por aprender mas de lo que te dicen en la escuela y pues si te interesa ir un poco mas aya creo que aqui o en http://www.javahispano.org/ puedes enccontrar tutoriales muy muy sencillos sobre JEE.
:)

Imagen de puzzlemaniaco

genial

ooooooooo genial ese tipo de comentarios, ideas, links son los que se agradecen........ en verdad gracias a los dos

Imagen de bferro

¿Swing es tecnología muerta?

Nadie ha anunciado el funeral de Swing. Sigue tan vivo como siempre y tiene su lugar en un chingo de escenarios y tan bueno es aprender a hacer aplicaciones Web como aplicaciones de escritorio, así que mi consejo es que sigas estudiando Swing para completar tu tarea que te vendrá tan bien como estudiar aplicaciones Web. Las aplicaciones de escritorio seguirán existiendo.

Imagen de puzzlemaniaco

de hecho

de hecho he empezado a ver algo de programación web con vb.net y la verdad es mas facil que java para escritorio, solo espero que java para web sea un poco mas practico

Imagen de paranoid_android

Mini ejemplo swing MVC

Te recomiendo los tutoriales de swing de roseindia.
Hay un plugin si usas Eclipse llamado window builder. Hay muchos otros mas.

A tu criterio
Puedes usar un solo Jframe en secciones usando un Layout y posteriormente puedes sustituir cada sección usando JPanel.
Si tienes 3 pantallas creas 3 JPanel e instancias la que necesitas.
La separación de MVC la que me gusta más es usando spring.
Yo uso este estilo de mvc para swing
La vista donde dibujas la pantalla
Modelo donde pones la lógica (lo que va a hacer)
El controller donde unes la las acciones con la pantalla es decir los listeners y eventos.
El Ejemplo:

package com.ejemplo;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.border.EmptyBorder;

public class VentanaPrincipal extends JFrame {
        //Generated Serial Version
        private static final long serialVersionUID = -3556595247296522743L;
       
        private Pantalla pantalla=new Pantalla();
        private Modelo modelo=new Modelo();
        private Controlador controlador = new Controlador();

        /**
         * Create the frame.
         */

        public VentanaPrincipal() {
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setBounds(100, 100, 450, 300);
               
                controlador.setVentanaPrincipal(this);
                controlador.setModelo(modelo);
                controlador.setPantalla(pantalla);
               
                pantalla.setBorder(new EmptyBorder(5, 5, 5, 5));
                setContentPane(pantalla);
               
                controlador.inicialize();
        }
       
        /**
         * Launch the application.
         */

        public static void main(String[] args) {
                EventQueue.invokeLater(new Runnable() {
                        public void run() {
                                try {
                                        VentanaPrincipal frame = new VentanaPrincipal();
                                        frame.setVisible(true);
                                } catch (Exception e) {
                                        System.out.println("Error:"+e.getMessage());
                                        e.printStackTrace();
                                }
                        }
                });
        }

}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

package com.ejemplo;

import javax.swing.JButton;

public class Pantalla extends JPanel {
    // Generated Serial Version
        private static final long serialVersionUID = 9134110906638554998L;

       
        private JButton btnHolaMundo;
        /**
         * Create the panel.
         */

        public Pantalla() {
                setLayout(null);
                btnHolaMundo = new JButton("Hola Mundo");
                btnHolaMundo.setBounds(134, 107, 127, 23);
                add(btnHolaMundo);
        }
       
        public JButton getBtnHolaMundo(){
                return btnHolaMundo;
        }
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package com.ejemplo;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Controlador {
 
 private VentanaPrincipal ventanaPrincipal;
 private Pantalla pantalla;
 private Modelo modelo;
 
 public void setVentanaPrincipal(VentanaPrincipal ventanaPrincipal) {
        this.ventanaPrincipal = ventanaPrincipal;
 }
 
 public void setPantalla(Pantalla pantalla) {
                this.pantalla = pantalla;
 }

 public void setModelo(Modelo modelo) {
                this.modelo = modelo;
 }
 
 
 public void inicialize() {
         pantalla.getBtnHolaMundo().addActionListener(holaMundoListener);
         modelo.setVentanaPrincipal(ventanaPrincipal);
 }
 
 private ActionListener holaMundoListener= new ActionListener() {
                public void actionPerformed(ActionEvent arg0) {
                        modelo.ejecutaHolaMundo();
                }
 };
 
 
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package com.ejemplo;

import javax.swing.JOptionPane;

public class Modelo {
    private VentanaPrincipal ventanaPrincipal;
   
    public void setVentanaPrincipal(VentanaPrincipal ventanaPrincipal){
        this.ventanaPrincipal=ventanaPrincipal;
    }  
       
        public void ejecutaHolaMundo() {
                JOptionPane.showMessageDialog(ventanaPrincipal, "Hola Mundo" ,
                                "Aplicación Ejemplo Swing", JOptionPane.INFORMATION_MESSAGE);
        }

}

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">