Você está na página 1de 5

Agregar JPanel en un JFrame en Java y Netbeans

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

Espero que les sea til este cdigo. Cdigo alojado en el Aula Virtual de la UES-FMO, dentro del curso de Programacin II.

public void actionPerformed(ActionEvent event) { Container contentPane = frame.getContentPane(); contentPane.removeAll(); contentPane.add(new YourPanel()); contentPane.invalidate(); contentPane.repaint(); }

Si lo q quieres es cargar un solo JPanel a la vez y en el mismo lugar, usa un JScrollPane. Y para cargar los paneles pon el siguiente codigo: jScrollPane1.setViewportView(new jPanel1());

Você também pode gostar