lunes, 11 de junio de 2012

JTable II

Hoy voy a seguir con los ejemplos de JTable, puesto que es un control muy completo y todavía queda bastante por mostrar.

Vimos como se puede construir una tabla sencilla, para mostrar datos estáticos que estan en un array. Ahora veremos como hacer para agregar filas a esta tabla y quitarlas.

Para ello utilizaremos un panel con cajas de texto para ingresar los datos y botones para realizar las acciones.

Aquí pueden ver el ejemplo:


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

public class EjemploJTable2 extends JFrame {


  public EjemploJTable2() {
    setTitle("Ejemplo");
    
    JPanel panel = new JPanel(new BorderLayout());
    
    panel.add(getPanelTexto(),BorderLayout.NORTH);
    panel.add(getPanelTabla(),BorderLayout.CENTER);
    
    setContentPane(panel);
    
    setVisible(true);
    pack();
  }
  
  
  private JTable tabla;
  private DefaultTableModel model;
  
  /*
   * Construye el panel con la tabla de datos
   */
  private JScrollPane getPanelTabla() {
    String[] columnas = { "Mes","Cantidad" };
    
    Object[][] datos = {
      { "Enero","10" },
      { "Febrero","23" },
      { "Marzo","14" },
      { "Abril","26" }
    }; 

    model = new DefaultTableModel(datos,columnas);
    
    tabla = new JTable(model);
    
    JScrollPane scrol = new JScrollPane(tabla);   
    
    return scrol; 
  }
  
  private JTextField txtMes,txtCantidad;  
  
  /*
   * Construye el panel con los controles y los botones
   */
  private JPanel getPanelTexto() {
    
    //Se crea un panel como una matriz de 2 filas por 3 columnas
    JPanel panelTexto = new JPanel(new GridLayout(2,3));
    
    JLabel lbMes = new JLabel("Mes");
    txtMes = new JTextField("");
    
    JLabel lbCantidad = new JLabel("Cantidad");
    txtCantidad = new JTextField("");
    
    JButton btnAgregar = new JButton("Agregar");
    
    ButtonAgregarListener agregarListener = new ButtonAgregarListener();
    btnAgregar.addActionListener(agregarListener);
    
    JButton btnQuitar = new JButton("Quitar");
    
    ButtonQuitarListener quitarListener = new ButtonQuitarListener();
    btnQuitar.addActionListener(quitarListener);
    
    //Estos controles se ubican en la primer fila
    panelTexto.add(lbMes);
    panelTexto.add(txtMes);    
    panelTexto.add(btnAgregar);
    
    //Estos se ubican en la segunda fila
    panelTexto.add(lbCantidad);
    panelTexto.add(txtCantidad);    
    panelTexto.add(btnQuitar);
    
    //Se agrega panelTexto a un panel con FlowLayout para que mantenga la proporcion   
    JPanel panel = new JPanel(new FlowLayout());
    
    panel.add(panelTexto);
    
    return panel;
  }
  
  public static void main(String[] args) {
    EjemploJTable2 frame = new EjemploJTable2();
  }

  public class ButtonAgregarListener implements ActionListener {
    
    
      public void actionPerformed(ActionEvent e) {
        
        //Se obtienen el contenido de las cajas de texto
        String mes = txtMes.getText();
        String cantidad = txtMes.getText();
        
        //se crea una array de String que sea la fila que agregaremos al modelo de la tabla
        String[] fila = new String[2];
        
        //Asignamos a cada columna su valor correspondiente
        fila[0] = mes;
        fila[1] = cantidad;
        
        //Agregamos la fila al modelo
        model.addRow(fila);
        
        //Vaciamos los controles
        txtMes.setText("");
        txtCantidad.setText("");
        
      }
      
   }

  public class ButtonQuitarListener implements ActionListener {
    
    
      public void actionPerformed(ActionEvent e) {
        
        //Obtenemos la cantidad de filas seleccionadas de la tabla
        int cantidadFilasSeleccionadas = tabla.getSelectedRowCount();
        
        if(cantidadFilasSeleccionadas > 0) {
        
          //Obtenemos cual es el nro. de fila que se selecciono
          int nroFila = tabla.getSelectedRow();
          
          //Quitamos esa fila del modelo
          model.removeRow(nroFila);
        }
        
        
      }
      
   }
  
}
		

Lo importante del ejemplo son las clases ButtonAgregarListener y ButtonQuitarListener, que son las que generan la acción de agregar o quitar datos de la tabla, como podran ver es bastante sencillo.

Tengan en cuenta que en este ejemplo no se realiza ninguna acción de control, es decir no se verifica que los datos que se agregan a la tablas sean nulos. Solo se verifica que al quitar una fila de la tabla, se encuentre alguna fila seleccionada.

Ejemplo de JTable

No hay comentarios:

Publicar un comentario