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); } }