41. Controles de tabla

En este tema, hablaremos de los controles de tabla, donde lo utilizaremos para mostrar datos desde una clase encapsulada.

Quiere decir esto que, primero crearemos una clase encapsulada, por ejemplo de alumnos, donde crearemos dos variables que seran el nombre del alumno y su edad. A continuacion, el codigo de la clase encapsulada "Alumnos":

 

Clase Alumnos

 

public class Alumnos {
 
    private String nombre;
    private int edad;
 
    public Alumnos(String nombre, int edad) {
        this.nombre = nombre;
        this.edad = edad;
    }
 
    public String getNombre() {
        return nombre;
    }
 
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
 
    public int getEdad() {
        return edad;
    }
 
    public void setEdad(int edad) {
        this.edad = edad;
    }
 
}
 
 
Luego, crearemos otra clase llamada "Ventana", donde pondremos los graficos y los controles de nuestra lista.
Como en los temas anteriores, tendremos que crear la tabla con "JTable" y el suministrador que es "DefaultTableModel", pero al mismo tiempo, el JTable lo enlazaremos con un "JScrollPanel" , acuerdate que hay que importar estos paquetes. Crearemos la clase de la siguiente manera:
 
Clase Ventana
 
import javax.swing.*;
import java.util.ArrayList;
import javax.swing.table.DefaultTableModel;
import javax.swing.JTable;
import javax.swing.JScrollPane;
 
public class Ventana extends JFrame{
 
    ArrayList<Alumnos>lista = new ArrayList<Alumnos>();
 
    JTextField cmpNombre, cmpEdad;
    JButton btnAgregar;
    DefaultTableModel dtm;
    JTable tabla;
    JScrollPane panel;
 
    public Ventana() {
        this("Ficha alumnos",0,0,350,500);
    }
 
    public Ventana(String titulo, int x, int y, int w, int h) {
        super(titulo);
        this.getContentPane().setLayout(null);
        this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        this.setBounds(x,y,w,h);
        this.setVisible(true);
 
        JLabel lblNombre = new JLabel("Nombre:");
            lblNombre.setBounds(10,20,80,20);
            this.getContentPane().add(lblNombre);
        cmpNombre = new JTextField();
            cmpNombre.setBounds(100,20,100,20);
            this.getContentPane().add(cmpNombre);
 
        JLabel lblEdad = new JLabel("Edad:");
            lblEdad.setBounds(10,50,80,20);
            this.getContentPane().add(lblEdad);
        cmpEdad = new JTextField();
            cmpEdad.setBounds(100,50,50,20);
            this.getContentPane().add(cmpEdad);
 
        btnAgregar = new JButton("Agregar");
            btnAgregar.setBounds(100,80,100,30);
            this.getContentPane().add(btnAgregar);
 
        dtm = new DefaultTableModel();
        dtm.setColumnIdentifiers(new Object[] {"Nombre", "Edad"});
        tabla = new JTable(dtm);
        panel = new JScrollPane(tabla);
            panel.setBounds(20,120,295,300);
            this.getContentPane().add(panel);
 
        btnAgregar.addActionListener(new GestionTabla(this));
 
        paintComponents(getGraphics());
 
        }
}

 

Fijate en el metodo "setColumnIdentifiers()", crea dos objetos en cadena de texto, lo que hace es crear dos titulos en la parte superior de la tabla.

Fijate tambien en la escucha (ActionListener) al boton "btnAgregar", en este caso no referenciamos la misma clase, si no, que creamos un nuevo objeto de la clase que vamos a crear a continuacion, que sera donde esta la accion en el boton.

Ahora crearemos una clase llamada "GestionTabla", donde implementaremos la accion al boton y sus acciones con respecto a la tabla.

 

Clase GestionTabla

 

import java.awt.event.*;
 
public class GestionTabla implements ActionListener {
 
    Ventana v;
 
    public GestionTabla(Ventana v) {
        this.v = v;
    }
 
    public void actionPerformed(ActionEvent event) {
        Alumnos alm = new Alumnos(v.cmpNombre.getText(), Integer.parseInt(v.cmpEdad.getText()));
        v.dtm.addRow(new Object[] {alm.getNombre(), alm.getEdad()});
        v.lista.add(alm);
        limpiarCampos();
    }
 
    public void limpiarCampos() {
        v.cmpNombre.setText("");
        v.cmpEdad.setText("");
    }
 
}
 
 
Instanciamos la clase Ventana (Ventana v), para tener acceso a sus elementos y controles. Luego en el metodo del boton, instanciamos la clase encapsulada "Alumnos" y creamos un objeto recogiendo los elementos de los JTextField de la clase Ventana. A continuacion, añadimos al "DefaultTableModel" en las columnas creando un nuevo objeto que contendra los elementos que recogemos de la clase encapsulada. Y esto lo añadimos a la lista que tenemos como Array.
Es un poco lioso, pero intenta hacer varios ejercicios como este y lo iras entendiendo.
 
Por ultimo, crearemos otra clase llamada "Principal" que sera la de arranque de la aplicacion:
 
Clase Principal
 
public class Principal {
 
    public static void main(String[]args) {
 
        Ventana v = new Ventana();
 
    }
 
}
 
En este ejercicio, has visto como las acciones en los botones, lo hemos hecho en una clase diferente. Con ello, tenemos mas control sobre el codigo.

 

Contacto

ProgramandoJava cabillo@hotmail.es