Ejemplo sencillo con JInternalFrame

De ChuWiki

Un JInternalFrame es una ventana que va metida dentro de un panel y no puede salirse de él. En java el panel adecuado y especializado en el manejo de JInternalFrame es el JDesktopPane.

Vamos a hacer un ejemplo sencillo de uso. El siguiente código crea un JFrame con un JDesktopPane dentro. Luego se crea una ventana JInternalFrame que tiene un JLabel y un JTextField. El JInternalFrame se mete dentro del JDesktopPane y se visualiza todo.

Es importante darle tamaño al JInternalFrame, ya que si no, no lo veremos -tiene tamaño 0,0-. Por defecto el JInternalFrame no es redimensionable, ni se puede cerrar ni tiene botones de maximizar y minimizar. Tendremos que decirle con los métodos adecuados si queremos que tenga esas características. También es importante hacer visible a posta el JInternalFrame, ya que por defecto es oculto.

/**
 * Ejemplo de uso de un JInternalFrame
 */
package chuidiang.ejemplos;

import java.awt.FlowLayout;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

/**
 * Instancia un JFrame con un JDesktopPane y dentro de este
 * un JInternalFrame.
 * @author chuidiang
 *
 */
public class PruebaInternalFrame {

	/** Instancia esta clase */
	public static void main(String[] args) {
		new PruebaInternalFrame();
	}
	
	/**
	 * Crea el JFrame, el JDesktopPane, un JInternalFrame de
	 * muestra y lo visualiza.
	 */
	public PruebaInternalFrame()
	{
		// El JFrame con el JDesktopPane
		JFrame v = new JFrame("Prueba JInternalFrame");
		JDesktopPane dp = new JDesktopPane();
		v.getContentPane().add(dp);
		
		// Se construye el panel que ira dentro del JInternalFrame
		JPanel p = new JPanel();
		p.setLayout(new FlowLayout());
		p.add (new JLabel("Una etiqueta"));
		p.add (new JTextField(10));
		
		// Se construye el JInternalFrame
		JInternalFrame internal = new JInternalFrame("Un Internal Frame");
		internal.add(p);
		
		// Es importante darle tamaño -pack()- al JInternalFrame,
		// porque si no, tendrá tamaño 0,0 y no lo veremos.
		internal.pack();
		
		// Por defecto el JInternalFrame no es redimensionable ni
		// tiene el botón de cerrar, así que se lo ponemos.
		internal.setResizable(true);
		internal.setClosable(true);
		
		// Se mete el internal en el JDesktopPane
		dp.add(internal);
		
		// Se visualiza todo.
		v.setSize(500,500);
		v.setVisible(true);
		v.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		
		// Se visualiza el JInternalFrame 
		internal.setVisible(true);
	}

}