package docen_swing;

import java.awt.Color;
import java.awt.event.*;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JApplet;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JPanel;

/********************************************************************************
 * Este applet es un ejemplo sencillo de uso de un grid (JTable).
 * El modelo de datos está en clase modelo_grid.
 * El botón añadir añade nueva fila con el texto que se ha escrito en el campo de texto.
 * El botón eliminar elimina fila seleccionada
 ********************************************************************************/
public class applet_grid extends JApplet {
   JTable tab;                                     // Grid (tabla)
   modelo_grid mod = new modelo_grid();            // Modelo de datos para el grid
   JScrollPane scroll;                             // Scroll de grid (tabla)
   JTextField texto = new JTextField( "Ponga aquí lo que desea añadir"); // Campo de texto
   JButton boton_añadir = new JButton( "Añadir");   // Botón Añadir
   JButton boton_elim = new JButton( "Eliminar");   // Botón Eliminar

   public void init() {
      try { jbInit(); }
      catch(Exception e) { e.printStackTrace(); }
   }

   private void jbInit() throws Exception {
      /**** Creo la tabla y le asigno el modelo de datos ****/
      tab = new JTable( mod );

      /**** Configuro tabla ***/
      tab.setBackground( Color.CYAN );       // Color de fondo
      tab.setCellSelectionEnabled( true);    // Seleccionar celdas (no filas)
      tab.setGridColor(Color.lightGray);     // Color de fuente
      tab.setRowHeight(25);                  // Altura de filas

      /**** Creo el scroll, le asigno la tabla y una política de scrolls ***/
      scroll = new JScrollPane( tab, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
				JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

      /*** Añado listeners a los botones ****/
      boton_añadir.addActionListener(new applet_grid_boton_añadir_actionAdapter(this));
      boton_elim.addActionListener(new applet_grid_boton_elim_actionAdapter(this));

      /**** Creo panel superior y le añado campo de texto y botones ***/
      JPanel panel_sup = new JPanel();
      texto.setPreferredSize( new Dimension(200,22));
      panel_sup.add( texto );
      panel_sup.add( boton_añadir );
      panel_sup.add( boton_elim );

      /*** Añado gestor de diseño al panel raiz ***/
      this.getContentPane().setLayout( new BorderLayout() );
      /**** Añadir panel superior al panel raíz ***/
      this.getContentPane().add( panel_sup, BorderLayout.NORTH );
      /**** Añadir scroll (con su tabla) al panel raiz ***/
      this.getContentPane().add( scroll, BorderLayout.CENTER );
   }

   /***** Evento: botón Añadir. Añado al JTable *************/
   void boton_añadir_actionPerformed(ActionEvent e) {
      String texto_para_añadir = texto.getText();   // Obtengo texto que voy a añadir
      int col = tab.getSelectedColumn();            // Obtengo número de columna seleccionada
      if ( col == -1 )                              // Si no hay columna seleccionada
	 col = 0;                                      // Selecciono la primera
      /* Ordeno al modelo que añada nueva fila y que escriba texto en la columna col */
      mod.añadir( texto_para_añadir, col);
   }

   /***** Evento: botón Eliminar. Elimino del JTable *************/
   void boton_elim_actionPerformed(ActionEvent e) {
      int fila = tab.getSelectedRow();         // Obtengo numero de fila seleccionada
      if ( fila != -1 )                        // Si hay fila seleccionada
	 mod.eliminar( fila);                     // Ordeno al modelo que elimine fila
   }
}

/************ CLASE LISTENER DE BOTON AÑADIR *************************/
class applet_grid_boton_añadir_actionAdapter implements java.awt.event.ActionListener {
   applet_grid adaptee;

   applet_grid_boton_añadir_actionAdapter(applet_grid adaptee) {
      this.adaptee = adaptee;
   }
   public void actionPerformed(ActionEvent e) {
      adaptee.boton_añadir_actionPerformed(e);
   }
}

/************ CLASE LISTENER DE BOTON ELIMINAR *************************/
class applet_grid_boton_elim_actionAdapter implements java.awt.event.ActionListener {
   applet_grid adaptee;

   applet_grid_boton_elim_actionAdapter(applet_grid adaptee) {
      this.adaptee = adaptee;
   }
   public void actionPerformed(ActionEvent e) {
      adaptee.boton_elim_actionPerformed(e);
   }
}
