Uso básico de elementos Swing con NetBeans – 18 – Uso de JInternalFrame.

En esta ocasión veremos la utilidad que se le puede dar a un JInternalFrame. Crearemos un formulario JFrame la cual podrá contener a la vez múltiples formularios internos utilizando una clase preestablecida que extiende a JInternalFrame. Esta es una de las tantas formas en que se puede organizar una aplicación de escritorio.

Diseñamos un formulario utilizando un JFrame (Nombre del formulario JInternalFrame). Utilizamos una barra de menú simple para poder ejecutar el método que crea el Formulario interno. En la imagen siguiente vemos el diseño de nuestro formulario, cada elemento tiene un nombre de variable como se especifica en la imagen, tomar en cuenta este punto ya que es necesario para referenciar los objetos. Se puede cambiar el “Nombre de variable” de cada objeto haciendo clic derecho sobre la misma y clic en “Cambiar nombre de variable…”. (clic sobre la imagen para ampliar)

A continuación debemos de crear una clase externa la cual será la plantilla de nuestro formulario interno. Si no está en el mismo paquete que nuestro formulario debemos de importarla.

Código Java

import javax.swing.JInternalFrame;

//Clase disponible en oracle.com
public class MyInternalFrame extends JInternalFrame {
//Cuenta la cantidad de JInternalFrame
static int openFrameCount = 0;
//Marca la posición "x" e "y"
static final int xOffset = 30, yOffset = 30;

//Contructor para el JInternalFrame
public MyInternalFrame() {
/*Parámetros public JInternalFrame(String title, boolean resizable, boolean closable,
boolean maximizable, boolean iconifiable)
*/

super("Documento. Frame " + (++openFrameCount),
true, //resizable
true, //closable
true, //maximizable
true);//iconifiable
//Tamaño asiganado
setSize(300,300);
//Localización en la pantalla.
setLocation(xOffset*openFrameCount, yOffset*openFrameCount);
}
}

Método único necesario.

Código Java
protected void frameUno(){
//Utilizamos nuestra clase MyInternalFrame creado
MyInternalFrame frame = new MyInternalFrame();
frame.setVisible(true);
//Se agrega al contenedor
desktop.add(frame);
try {
//Seleccionable
frame.setSelected(true);
} catch (java.beans.PropertyVetoException e) {
}
}

Lista de las importaciones que debemos de tener para utilizar ciertos elementos en nuestro formulario. También el código que debe contener el constructor del JFrame.

Lista de Importaciones. El

import com.app.MyInternalFrame;
depende en que paquete este la clase. Tomar en cuenta.

Código Java
import com.app.MyInternalFrame;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JDesktopPane;

Códigos utilizados en el constructor.

Código Java
public JInternalFrame() {
initComponents();
setLocationRelativeTo(null);//Centrar el formulario
setTitle("Uso de JInternalFrame.");
int inset = 80;
//Dimensión del JFrame
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
//parámetros setBounds(int x, int y, int width, int height)
setBounds(inset, inset,
screenSize.width - inset*2,
screenSize.height - inset*2);
//JDesktopPane será el contenedor del JInternalFrame
desktop = new JDesktopPane();
//Al ejecutar el formulario se crea el primer JInternalFrame ejecutando el
//método que la crea
frameUno();
//Agregamos desktop al JFrame
setContentPane(desktop);
//Posibilita mover el JInternalFrame en la pantalla
desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
}
JDesktopPane desktop;//Variable de clase

Para el menú utilizaremos el evento “ActionPerformed”, en guías anteriores de esta serie vimos como se implementan los eventos. Seguido el evento que llama a nuestro método.

Código Java
    private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
frameUno();
}

Llegado a esta parte podremos ejecutar nuestro formulario. Como se ve en la imagen, es posible tener multitud de formulario dentro del JFrame, cada uno con sus propiedades específicas. (Por si hay alguna duda en el proceso, debemos hacer clic derecho sobre nuestro archivo fuente y presionar “ejecutar archivo” ya que nuestro proyecto no tiene una clase principal definida) (clic sobre la imagen para ampliar)

No hay comentarios :

Publicar un comentario en la entrada