15/2/10

Formularios MDI en Netbeans (Sencillo)

 Para crear Frames internos, tambien conocidos como "formularios MDI" (Interfaz de Multiples Documentos) en Netbeans, debemos hacer uso de los objetos JInternalFrame (el formulario hijo en si)  y de una JFrame normal que servira como formulario padre.


El proyecto:

Paso 1. Crea un nuevo proyecto en Netbeans, llamalo "MDIjava", a este nuevo proyecto agregale un JFrame al cual llamaras "papa", despues añade los objetos JMenuBar, JMenu y JDesktopPane, este ultimo es una subclase de JLayeredPane que nos permite manipular frames internos

Paso 2: Ahora para insertar los frames internos, nos dirigimos al paquete de nuestro proyecto, hacemos clic derecho y escogemos NEW -- OTHER -- en la ventana que nos aparece, buscamos SWING GUI FORMS y JINTERNALFRAME, presionas siguiente y coloca un nombre al form, "Hijo1" y para terminar FINISH.
Realiza este paso una ves mas, pero al nuevo frame llamalo "Hijo2".
Esto te creara un nuevo Frame vacio, debes tener algo como esto hasta ahora
Paso 3: Has clic derecho sobre el JInternalFrame "Hijo1" y elige "propiedades" (properties), y realiza los siguientes cambios :
Realiza el mismo paso para el JInternalFrame "Hijo2"

Paso 4: Puedes trabajar con los nuevos frames "Hijo 1" e "Hijo 2" independientemente, y añadirles los objetos para trabajar en ellos.

Paso 5: Para llamarlos desde el jFrame padre, clic derecho sobre uno de los JMenu y escoge EVENTS - ACTION - ACTIONPERFORMED
El codigo para crearlos es el mismo que si de un JFrame se tratara, con la diferencia de que despues hay que añadirlos al JDesktop, el codigo es el siguiente:

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
        // Se crea el objeto       
        Hijo1 h1 = new Hijo1();
        // se añade al jDesktopPane
        jDesktopPane1.add(h1);
        //se muestra en pantalla
        h1.show();
    }

Lo mismo para el "Hijo 2" y ya esta
Codigo fuente aqui abajo
Click para descargar

26 comentarios:

  1. Es muy buena la aplicacion me sirvio mucho....gracias!!!

    ResponderEliminar
  2. Amigo hola como estas, tengo un problema quiero llamar un jinternalframe desde otro internalframe, todo esto debe ocurrir dentro del frame padre.como haria... desde ya gracias..ojala me contestes a tiempo :(

    ResponderEliminar
  3. pues esta medio complicado explicar pero haber.

    tomando como ejemplo el programa de esta post, lo que debes hacer es

    1. Al JDesktopPane, ingresas a sus propiedades -> code, y en variable modifiers, le aumentas STATIC

    2. en el form principal, le añades este metodo:
    static public void abrirhijo(){
    // Se crea el objeto
    hijo2 hijomio = new hijo2();
    // se añade al jDesktopPane
    Panel.add(hijomio);
    //se muestra en pantalla
    hijomio.show();
    }

    3. en el form hijo que quieres utilizar, por ejemplo HIJO1, le añades un boton y llamas al metodo:

    papa.abrirhijo();

    eso es todo :=)

    perdon por la tardanza :/

    ResponderEliminar
  4. Hola JC - MOUSE y atodos los que usaron el codigo, aqui va mi aporte, esto que escribire acontinuacion, permite abrir los hijos en una sola instancia, ya que de ,la forma que empelaste, mostrara al hijo cada vez que cliceemos el objeto que lo mostrará y asi se veran muchas instancias del mismo, cosas que no es efectiva, bien aqui está:

    // Se crea el objeto una sola vez.....
    Hijo1 h1 = new Hijo1();

    private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {

    // se añade al jDesktopPane
    jDesktopPane1.add(h1);
    //se muestra en pantalla
    h1.show();
    }


    es todo, algo simple pero que me costo hacerlo...XD

    De paso, espero me ayuden con esto:

    Quiero cerrar un JInternalFrame pero no ocultarlo, sino, que se cierre, que finalice, que desaparezca del buffer... digamos que empleo setVisible(true); para mostrar, est abien, lo ejecuta, pero si empleo setVisible(false); solo lo oculta y todo lo que hice alli se volverá a ver al mostrarlo nuevamente; a eso voy, digamos, abro mi JIF y alli tengo un jtext en el cual he escrito algo, si uso setvisible, lo que escribi me vuelve a aparecer... creo que me explico, espero me ayuden!!!

    Gracias!!!

    ResponderEliminar
  5. Pra cerrar un JinternalFrame lo debes hacer de la siguiente manera
    this.dispose();

    ResponderEliminar
  6. kien lo puede hacer ayudenme...el trabajo me inmpide..hacerlo.el record..es de 2.Horas ..el que lo aga en menos..mis Respetos..Gracias

    Construir una aplicación que permita automatizar el sistema de información académico de la Universidad Privada para los alumnos de la carrera de Ingeniería de sistemas, de acuerdo a los siguientes criterios que se plantean a continuación:

    CARACTERISTICAS DE LA APLICACIÓN:
    • DEBE SER ORIENTADA A OBJETOS
    • DEBE SER EN ENTORNO VISUAL(Java Swing)
    • DEBE ESTAR BASADA EN ESTRUCTURA DE DATOS (ARREGLOS O LISTAS (vectores, HashTable, etc.)). NO USAR BASE DE DATOS

    ALCANCES DE LA APLICACIÓN:
    El sistema debe estar conformado por 4 formularios los cuales será invocado desde un JMenuBar.
    FORMULARIO 1: REGISTRO DE ALUMNOS
    Se almacenarán los siguientes datos: CodAlu (Código del alumno), ApeAlu (Apellido del Alumno) y NomAlu (Nombre del Alumno)

    En este formulario se podrán realizar las operaciones de mantenimiento de datos de los alumnos (tales como: Insertar, Modificar, Eliminar y buscar). Todos los alumnos Ingresados deben Mostrarse en forma de Listado

    FORMULARIO 2: REGISTRO DE ASIGNATURAS
    Se almacenarán los siguientes datos: CodAsi (Código de la asignatura), NomAsi (Nombre de la asignatura) y ciclo.

    En este formulario se podrán realizar las operaciones de mantenimiento de datos de los alumnos (tales como: Insertar, Modificar, Eliminar y buscar). Todos los alumnos Ingresados deben Mostrarse en forma de Listado
    FORMULARIO 3: REGISTRO DE NOTAS
    Se almacenarán los siguientes datos: CodAlu (Código del alumno), CodAsi (Código de la asignatura), PC1, EP, PC2, TP, EF, SUST, PF.

    El ingreso de notas en este formulario debe realizarse de la siguiente forma:

    a) Se debe seleccionar mediante un jCombo al alumno.
    b) Luego, seleccionar mediante otro combo el ciclo en el cual el alumno está matriculado
    c) Luego seleccione la asignatura que corresponde al ciclo donde el alumno está matriculado. (El combo automáticamente debe presentar dichas asignaturas)
    d) Luego Ingresar la notas que correspondan. Al finalizar se debe presionar el botón Grabar. (El cálculo del Promedio final debe ser automático)
    e) Los Datos ingresados debe visualizarse en forma de listado

    FORMULARIO 4: REPORTE DE NOTAS
    Este formulario debe visualizarse el reporte de notas de acuerdo a los siguientes criterios: Por asignaturas, Por ciclo, Por Alumnos y por situación académica (aprobado o desaprobado)

    Comentario y explicaciones...porfavor lo mas sencillo posible,,

    ResponderEliminar
  7. kien lo puede hacer ayudenme...el trabajo me inmpide..hacerlo.el record..es de 2.Horas ..el que lo aga en menos..mis Respetos..Gracias

    Construir una aplicación que permita automatizar el sistema de información académico de la Universidad Privada para los alumnos de la carrera de Ingeniería de sistemas, de acuerdo a los siguientes criterios que se plantean a continuación:

    CARACTERISTICAS DE LA APLICACIÓN:
    • DEBE SER ORIENTADA A OBJETOS
    • DEBE SER EN ENTORNO VISUAL(Java Swing)
    • DEBE ESTAR BASADA EN ESTRUCTURA DE DATOS (ARREGLOS O LISTAS (vectores, HashTable, etc.)). NO USAR BASE DE DATOS

    ALCANCES DE LA APLICACIÓN:
    El sistema debe estar conformado por 4 formularios los cuales será invocado desde un JMenuBar.
    FORMULARIO 1: REGISTRO DE ALUMNOS
    Se almacenarán los siguientes datos: CodAlu (Código del alumno), ApeAlu (Apellido del Alumno) y NomAlu (Nombre del Alumno)

    En este formulario se podrán realizar las operaciones de mantenimiento de datos de los alumnos (tales como: Insertar, Modificar, Eliminar y buscar). Todos los alumnos Ingresados deben Mostrarse en forma de Listado

    FORMULARIO 2: REGISTRO DE ASIGNATURAS
    Se almacenarán los siguientes datos: CodAsi (Código de la asignatura), NomAsi (Nombre de la asignatura) y ciclo.

    En este formulario se podrán realizar las operaciones de mantenimiento de datos de los alumnos (tales como: Insertar, Modificar, Eliminar y buscar). Todos los alumnos Ingresados deben Mostrarse en forma de Listado
    FORMULARIO 3: REGISTRO DE NOTAS
    Se almacenarán los siguientes datos: CodAlu (Código del alumno), CodAsi (Código de la asignatura), PC1, EP, PC2, TP, EF, SUST, PF.

    El ingreso de notas en este formulario debe realizarse de la siguiente forma:

    a) Se debe seleccionar mediante un jCombo al alumno.
    b) Luego, seleccionar mediante otro combo el ciclo en el cual el alumno está matriculado
    c) Luego seleccione la asignatura que corresponde al ciclo donde el alumno está matriculado. (El combo automáticamente debe presentar dichas asignaturas)
    d) Luego Ingresar la notas que correspondan. Al finalizar se debe presionar el botón Grabar. (El cálculo del Promedio final debe ser automático)
    e) Los Datos ingresados debe visualizarse en forma de listado

    FORMULARIO 4: REPORTE DE NOTAS
    Este formulario debe visualizarse el reporte de notas de acuerdo a los siguientes criterios: Por asignaturas, Por ciclo, Por Alumnos y por situación académica (aprobado o desaprobado)

    Comentario y explicaciones...porfavor lo mas sencillo posible,,

    hasta este jueves ..porfaaaa

    ResponderEliminar
  8. llegue tarde pero no esta tan dificil esa aplicacion que dice, lo siento

    ResponderEliminar
  9. hola mouse..soy el de la aplicacion anterior..bueno intente hacerlo..no en 2 horas si no en mas tiempo...lo de la hora es referncial..bueno ..salio el trabajo ..pero me faltaron lagunas cosas....Bueno si existe la forma mas sencilla ..si puedes hacerlo..y explicarlo como siempre..gracias amigo..cuidate..soy el de la aplicacion que no pude realizar.

    ResponderEliminar
  10. MUCHAS GRACIAS POR LA AYUDA, TMB M SIRVIO DE MUXO!!!
    SALU2

    ResponderEliminar
  11. lo voy a ensayar espero me sirva se le agradece, bna explicación.

    ResponderEliminar
  12. Buena info ratita, pero como abro la ventana 2 desde la 1 y le envio un valor a una variable creada en la ventana 2. Si puedo abrir la ventana 2 desde la 1 pero no puedo asignarle valores a sus variables. Muchas gracias, saludos.

    ResponderEliminar
  13. Anonimo ultimo: para compartir valores entre formularios puedes utilizar STATIC o referencias a los objetos

    ResponderEliminar
  14. Hola saludos
    tengo una pregunta
    ¿Como podría hacer los MDi en NetBeans 7? ya he intentado de todo!. Quería usar java por que detesto el software propietario y además java es multi plataforma pero la verdad me NetBeans me parece una m!erd4, q' lastima creo ke me tocará devolverme al mald!t0 visual basic que aunke a veces mal funcione por lo menos hay buena documentacion al respecto en la web.
    gracias de antemano por la atencion y la pronta respuesta.

    ResponderEliminar
  15. Una vez más tu blog me ha servido de mucho para aprender.

    Gracias.

    ResponderEliminar
  16. Como crear un sitema de registro de alumnos en java con netbeans.

    ResponderEliminar
  17. Hola alguien me puede ayudar, necesito programar un sumulador de ingenieria economica en netbeans, es como una calculadora. Gracias

    ResponderEliminar
  18. oye necesito un favor necesito mostrar los jINTERNALFRAME EN FORMA DE CASCADA O MOSAICO QUE SALGAN ORDENADOS.. SERA QUE PUEDES??

    ResponderEliminar
  19. Hola amigo, en primer lugar felicitarte por el esfuerzo de brindar tus conocimientos a los que recien empezamos.
    Bueno me baje el IDE 7.1 de netbeans y lo primero que hice fue crear una aplicacion con un procedimiento main() y luego agregue un MDI del asistente, al momento de ejecutar el MDI me aparece con un fondo azul muy bonito (pareciera una imagen), pero al momento de llamarlo desde el metodo main de la clase principal se pierde y aparece un fondo en blanco. Porque pasa eso, me podrias ayudar??

    ResponderEliminar
  20. ya se porque aparece no aparece el fondo azul, que en si se trata del tema NIMBUS, lo que pasa es que al crear el MDI a traves del asistente, te crea un metodo main() donde se personaliza el formulario y alli hay un comentario que esta colapsado, pero si lo abres veran las sentencias que permiten aplicar el diseño al fomulario
    /*
    * Set the Nimbus look and feel
    */
    ahora, como yo lo llamo desde otro main() de la clase principal de la aplicacion no ejecutaba ese main() del formulario, por lo que movi el codigo este, al main de mi clase principal y funcionó.
    Ahora mi pregunta es si estará bien colocarlo alli o dentro de un proceso de inicializacion del formulario, asi como los eventos INIT() o LOAD() de los otros lenguajes del programacion.

    ResponderEliminar
  21. Tengo un problema. Quisiera que cada vez que llame a un jframeinternal desde el menu solo se abra una vez y no varias ventanas del mismo, osea si esta presenten en el jdesktop ya no se abra otro hasta que este cerrado y otra problema q tengo, que pasa si el jframinternal es mas grande q el jdesktop como apareceria las barras de desplazamiento automaticamente dependiendo de los jinternalframe.
    Dejo mi msn por siaca : pier_164@hotmail.com
    espero tu ayudo please.

    ResponderEliminar
  22. Perfecto manual y muy util, gracias

    ResponderEliminar
  23. Akles dejo una pequeña aplicacion ... http://darwinomartics.blogspot.com/2013/09/java-alquiler-de-habitaciones.html

    ResponderEliminar
  24. buenas tardes mouse
    muy bonito ejemplo, quisiera saber si hay alguna forma de que el reporte de ireport se pueda ver dentro de la aplicacion mdi como un Jinternalframe?

    gracias

    ResponderEliminar