You are on page 1of 5

Agregar JPanel en un JFrame en Java y Netbeans

19 abril 2009

Muchos compaeros me han pedido ejemplos para


agregar o instanciar JFrames o JPanels dentro de otro JFrame. Existe un control Swing llamado Internal
Frame que se utiliza para agregar Frames dentro otro. Sin embargo, debemos recordar que un Frame
tiene propiedades tales como la barra de ttulos, los botones de maximizar, minimizar y cerrar, coloca
un nuevo tem en la barra de tareas en Windows, KDE y Gnome, entre otras propiedades. Cabe destacar
que muchas veces estos atributos no sern necesarios y entorpeceran el accionar de la aplicacin.
Muchas veces necesitamos unicamente un pequeo recuadro e insertarlo en uno u otro JFrame. As que
para esos efectos estn los JPanels. Realizaremos un pequeo ejemplo con stos.
Vamos a realizar una pequea aplicacin, que consiste en realizar dos de las operaciones bsicas: sumas
y restas. Para realizar cada una de ellas, el JFrame aade entre sus componentes a dos JPanels, uno
para cada operacin respectivamente.
Antes de mostrar cmo crear los JPanels, debemos de cambiar el layout al JFrame que utilizaremos. El
Layout es una propiedad de los contenedores Swing para colocar todos los elementos que se contienen
dentro de l. Como Java es multiplataforma, y en cada una de ella se disponen de manera distinta el
orden de los elementos o componentes. Por lo tanto, Swing lo realiza con la ayuda de los layouts. En
modo diseo del JFrame, hacemos click derecho a la opcin Set Layout y le asignamos Null Layout, ya
que nosotros colocaremos otro tipo de layout diferente al del diseo libre que nos brinda el editor de
diseo de Netbeans. De esta forma:

Ahora s, creamos dos JPanels desde el navegador de proyectos, uno llamado panelHijoSuma y otro
panelHijoResta. Deben quedar de la siguiente manera:

Vean que el ltimo TextBox se encuentra deshabilitado para que sea modificado por el usuario. Este solo
presentar el resultado y el usuario jams lo podr tocar.
Al JFrame, tal y como lo observaron al inicio de este artculo solo le agregamos una Menu Bar, y un par
de tems para que luzca as:

Ahora, dentro del JFrame, en su constructor, y luego de la inicializacin de componentes, vamos a


establecer el layout a utilizar. Para este ejercicio, escog el FlowLayout, que dispone un orden de los
elementos horizontal uno tras otro y con cierto espaciado que podemos asignar.
El cdigo dentro del constructor deber ser el siguiente:

//Constructor
public framePadre() {
//llamo al constructor padre y le mando el nombre del ttulo de la ventana
super("Operaciones Bsicas");
//Funcin de inicializacin de componentes. Netbeans la coloca por defecto
initComponents();
//Colocamos el nuevo tipo de layout que queremos que tenga nuestro JFrame
this.setLayout(new FlowLayout());
}
Tambin creamos dos atributos al JFrame, para ms facilidad. Sern dos atributos del tipo de datos de
cada uno de los JPanel.
private panelHijoSuma hs;
private panelHijoResta hr;
Ahora, en cada una de los tems de la barra de men, para mostrar el JPanel deseado, colocamos el
siguiente cdigo:
//Nombre evento
private void nSumaActionPerformed(java.awt.event.ActionEvent evt) {
//Si ya est el otro Jpanel aadido al contenedor, entonces se elimina
try{
this.remove(hr);
}
catch(Exception e){
}
//Creamos una nueva instancia de panelHijoSuma
hs = new panelHijoSuma();
//Agregamos la instancia al JFrame, con un layout al centro
this.add(hs, BorderLayout.CENTER);
//Hacemos que el JFrame tenga el tamao de todos sus elementos
this.pack();
}
Este cdigo debe de ser similar en los restantes tems de la Menu Bar, siempre con el evento
ActionPerformed.

Ahora, la parte final de este artculo. Realizaremos cada una de las operaciones dentro del evento de los
TextBox, KeyReleased(). De esta forma:

Ahi agregaremos el siguiente cdigo:


//Nombre del evento. Lo genera Netbeans
private void txtnum1KeyReleased(java.awt.event.KeyEvent evt) {
//Asignamos el texto del textBox a una variable Integer
int num1 = Integer.parseInt(this.txtnum1.getText());
//Si el otro TextBox no esta vacio, entonces se debe realizar la operacin
if (!this.txtnum2.getText().equals("")){
int num2 = Integer.parseInt(this.txtnum2.getText());
//Se realiza la operacin, y se coloca en el TextBox del resultado
this.txtresultador.setText(String.valueOf(num2+num1));
}
}
La aplicacin debe lucir as:

El mismo JFrame con uno y otro JPanel

You might also like