Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Componentes / Java / Crear componentes en tiempo de ejecuci贸n con Netbeans

Crear componentes en tiempo de ejecuci贸n con Netbeans

Por jc mouse lunes, junio 4, 2012

馃檪 Una de las preguntas m谩s buscadas por programadores java es la de crear componentes swing en tiempo de ejecuci贸n, eso no es dif铆cil y la respuesta bastante obvia, sin embargo la mayor铆a se tranca en darle alguna utilidad al control creado, por ejemplo, para crear un JButton en tiempo de ejecuci贸n (el ejemplo m谩s com煤n), basta con las siguientes l铆neas de c贸digo:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    JButton boton = new JButton("Soy un boton");
    boton.setVisible(true);
    boton.setSize(100,45);
    this.add(boton);
    this.validate();
}

Colocando estas lineas dentro un JButton, cada vez que sea presionado, a帽adir谩 un nuevo bot贸n al contenedor, ahora para darle un poco de utilidad, se debe a帽adir al bot贸n que se crea un聽ActionListener y escribir las lineas de c贸digo que se ejecutaran cuando el usuario interactue con el bot贸n creado en tiempo de ejecuci贸n.

Bonito ejemplo, sencillo, pero no nos sirve, no para los que quieren hacer algo m谩s elaborado, y con pocas lineas de c贸digo, as铆 que mejor hagamos las cosas interesantes, en este post crearemos un swing en tiempo de ejecuci贸n al cual le a帽adiremos un ActionListener y su evento correspondiente, sin embargo para variar un poco de los ejemplos de la red, el componente que a帽adiremos sera un componente previamente dise帽ado por nosotros.

dinamic swing

Como se ve en la imagen, nuestro programa consta de un bot贸n al cual, cada vez que sea presionado, a帽ade un componente que esta formado por un JPanel como contenedor, el cual alberga a un jlabel, un jTextField y un JButton, cuando este JButton sea presionado, obtendr谩 el valor que esta en el JTextField y lo muestra en un JOptionPane, se puede ver tambi茅n la palabra 芦key_3禄 este es un identificador 煤nico para cada objeto din谩mico que creamos y se va llenando de acuerdo al orden de creaci贸n, es decir key_1, jey_2, key_3….key_n, en nuestro ejemplo presionamos el bot贸n 3.

Ok, creo que se entiende lo que queremos hacer, as铆 que empecemos.

Necesitamos

  • Java y Netbeans 6.9

Proyecto.

1. Crea un nuevo proyecto en Netbeans. A帽ade un JFrame (nombre: interfaz.java), una clase (nombre: jcPanel.java) y un JPanel (jpComponente.java), es decir:

Proyecto
-- Main.java
-- interfaz.java
-- jcPanel.java
-- jpComponente.java

Est谩 sera nuestra estructura de trabajo. Continuemos

2. 聽Lo primero sera dise帽ar nuestro componente din谩mico. Abre el JPanel: jpComponente y a帽ade los siguientes controles:

jcPanel

Dir铆gete al codigo 芦Source禄 y modifica el constructor de clase de la siguiente manera:

//ANTES
public jpComponente() {
   initComponents();
}

//DESPUES
public jpComponente( int index ) {
   initComponents();
   //JPanel
   setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));
   this.setSize(230, 30);
   this.setVisible(true);
   //se agrega un comando al boton
   this.btn.setActionCommand("key_" + index);
}

Para terminar el componente, debemos modificar la propiedad PRIVATE de los objetos JButton: btn y JTextField: txtName que netbeans nos crea por defecto, por la de PUBLIC, para hacer esto, en el JButton realiza clic derecho y dir铆gete a PROPIEDADES, despu茅s ve a la pesta帽a CODIGO, donde dice 芦Modificadores de variable: private […]禄, clic en el bot贸n con puntos suspensivos, aparece una peque帽a ventana, ah铆, en el combo que dice 芦Acceso芦, escoge la opci贸n PUBLIC y le das ACEPTAR -> CERRAR, repite los mismos pasos para el JTextfield.

3. Abre ahora la clase jcPanel y pega el c贸digo:

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.swing.BorderFactory;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
/**
 * @web https://www.jc-mouse.net
 * @author Mouse
 */
public class jcPanel extends JPanel implements ActionListener {

    private int index = 1;
    //Nos sirve para almacenar a los objetos creados
    private Map nota = new HashMap();

    public jcPanel()
    {
        this.setSize(300, 400);
        this.setVisible(true);
        this.setBorder(BorderFactory.createLineBorder( Color.BLACK ));
        this.setLayout( new FlowLayout() );
    }

    public void Mi_Componente()
    {        
        //instancia nueva a componente
        jpComponente jpc = new jpComponente(index);
        jpc.btn.addActionListener(this);//escucha eventos
        this.add(jpc);//se a帽ade al jpanel
        this.validate();
        //se a帽ade al MAP
        this.nota.put("key_" + index, jpc );
        //se incrementa contador de componentes
        index++;
    }

    public void actionPerformed(ActionEvent e) {
        //se obtiene el comando ejecutado
        String comando = e.getActionCommand();
        //se recorre el MAP
        Iterator it = nota.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry)it.next();
            //se obtiene el KEY -> identificador unico
            String itm = entry.getKey().toString();
            //si comando de componente es igual a comando pulsado
            if( itm.equals(comando))
            {
                //se recupera el contenido del JTextfield
                String name = ((jpComponente) entry.getValue()).txtName.getText();
                //mostramos resultado
                JOptionPane.showMessageDialog(null, "Se presiono boton " + itm + " \n Hola " + name);
            }
        }
    }

}

Explicaci贸n: Lo que hacemos en esta clase es extender de un JPanel e implementar el ActionListener, lo primero es para tener un JPanel personalizado donde agregar los controles din谩micos, los segundo para escuchar los eventos del usuario sobre los controles.

El m茅todo llamado 芦Mi_componente()禄, creara un nuevo jcComponente, le a帽ade un addActionListener聽y lo coloca al contenedor, al mismo tiempo hacemos uso de un MAP donde tambien se a帽adira el componente y aqu铆 lo importante, el key_n (identificador 煤nico), para llevar un control de los controles creados se utiliza una variable de tipo entero llamado 芦index芦. Tenemos tambien el m茅todo actionPerformed, este metodo propio del ActionListener, nos permite gestionar los eventos de cada uno de los controles creados, cada boton dentro del jpComponente cuenta con un actioncomand, cuando se presiona un bot贸n recorremos el MAP y buscamos el comando que corresponda, cuando lo encontramos extraemos el componente y ya podemos manipularlo como queramos, para este ejemplo, extraemos el contenido del JTextField: txtName y lo mostramos junto al Key_n en un JOptionPane.

4. Para terminar implementamos todo esto en la clase interfaz.java, pero primero, a la interfaz le a帽adimos un JButton y le damos un tama帽o como para que entre nuestro JPanel: jcPanel.

Ahora implementamos nuestra clase jcPanel, a帽adimos al JFrame y colocamos el evento pata el JButton

01    jcPanel mi_panel = new jcPanel();
02 
03    /** Creates new form interfaz */
04    public interfaz() {
05       initComponents();
06       //se a帽ade componente al JFrame
07       this.add(mi_panel);
08       //posicion del panel para no sobreponer al boton
09       this.mi_panel.setLocation(10, 50);
10    }
11 
12    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
13        mi_panel.Mi_Componente();
14    }

FIN

Ejecuta 馃檪

dinamic swing

Descargar聽Proyecto Controles din谩micos

Tags

Art铆culos similares

Facturaci贸n electr贸nica: El C贸digo de Control

驴Que es la facturaci贸n electr贸nica? Una factura es un documento que sirve para describir el costo de los servicios y des[...]

Blog MVC – Iniciando el proyecto [p2]

Segunda parte del tutorial [Crea tu blog con el patr贸n MVC y php]. En esta 2da parte toca ver lo que es la creaci贸n del[...]

Imprimir Swing

Java Printing nos permite hacer uso de las impresoras del sistema para, valga la redundancia 馃檪 imprimir los gr谩ficos de[...]

Google Circles en java

En este tutorial crearemos el bot贸n de Google+ Google Circles para una interfaz de escritorio 馃檪 si no sabes lo que son e[...]

Compartir conexi贸n de base de datos

Cuando utilizamos aplicaciones web con conexi贸n a base de datos MYSQL, se suele crear una clase que gestione la interacc[...]

Esteganografia LSB en Java – [Proyecto Completo]

Mensajes ocultos utilizando el m茅todo de Inserci贸n en el bit menos significativo (Least Significant Bit Insertion) El m茅[...]