INGENIERÍA DE SISTEMAS Y TELEMÁTICA
FIORELLA AGUILAR ISUIZA
JTABLE
Jtable es una clase que me permite organizar una determinada
información en tabla, esta difiere de una base de datos normal porque al
utilizar Jtable tu puedes visualizar esta tabla, brindándole a el usuario
organización de información, oportunidades de editar y cambiar el tamaño de las
columna entre otras.
JTable es un componente swing java que nos permite mostrar
datos en una tabla de una base de datos, sin embargo a diferencia de otros
componentes similares de otros lenguajes de programación (Delphi por ejemplo),
java no nos permite gestionar directamente los datos. Es eso lo que haremos
hoy, construir un JTable editable, más propiamente, este JTable nos permitirá
actualizar datos de una JTable directamente con la base de datos.
El Ejemplo.
Para el ejemplo
presentaremos una ventana de registro de usuarios donde a medida que se
diligencia el formulario, se almacenan los datos en la BD, desde allí se
obtendrá la información y se mostrarán los datos.
los JTable son aparentemente iguales, sin embargo
la diferencia está en la forma como los llenamos el primero lo llenaremos
usando lógica de programación, el segundo lo llenaremos con un componente DefaultTableModel.
Este ejemplo es basado en la aplicación realizada sobre el
Patrón Modelo Vista Controlador (El Script de la BD lo encuentran en
esa entrada), por lo tanto usaremos parte de la lógica desarrollada para esta
solo dejaremos la vista de registro, agregandole los JTable con las
que vamos a trabajar.
La Aplicación.
Como se mencionó el ejemplo es simple, tenemos una sección
de registro y una sección donde mostramos los JTable.
Por cuestiones de simplicidad no aplicaremos el MVC de
lleno, sin embargo seguimos usando los patrones DAO y VO para el manejo de la
información, el primero para comunicarnos con la BD y el segundo para
transportar nuestros datos.
En la clase Conexion tenemos los parámetros requeridos para
conectarnos a nuestra BD MySql, por ultimo usamos la clase Principal para
llamar a la VentanaRegistro donde presentamos la GUI y llenamos las tablas
que muestran la información.
Tabla Usuario Matriz
de Datos.
Este JTable lo llenamos aplicando un poquito de
lógica de programación, uno de los constructores de la clase JTable recibe 2
argumentos, el primero es la matriz con los datos a mostrar, el segundo es un
arreglo con los nombres de las columnas, por esa razón lo que hacemos es
obtener los datos de la BD, almacenarlos en una lista y posteriormente pasarlos
a la matriz, así como inicializar un arreglo con los encabezados para
finalmente mandárselos al contructor.
public void mostrarDatosUsandoLogica() {
String titulos[] = { "Codigo",
"Nombre", "Edad",
"Profesión","Telefono" };
String información[][] = obtieneMariz();//
obtenemos la informacion de la BD
mitabla1 = new JTable(información, titulos);
mitabla1.setEnabled(false);
mitabla1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
mibarra1.setViewportView(mitabla1);}
private String[][] obtieneMariz() {
PersonaDao miPersonaDao = new PersonaDao();
* llamamos al metodo que retorna la info
de la BD y la almacena en la
* lista
ArrayList< PersonaVo > miLista =
miPersonaDao.buscarUsuariosConMatriz();
* como sabemos que son 5 campos,
definimos ese valor por defecto para
* las columnas las filas dependen de los
registros retornados
String informacion[][] = new String[miLista.size()][5];
for (int x = 0; x <
informacion.length; x++) {
informacion[x][0] =
miLista.get(x).getIdPersona() + "";
informacion[x][1] =
miLista.get(x).getNombrePersona() + "";
informacion[x][2] =
miLista.get(x).getProfesionPersona() + "";
informacion[x][3] =
miLista.get(x).getEdadPersona() + "";
informacion[x][4] =
miLista.get(x).getTelefonoPersona() + "";
}
return informacion;}
Tabla Usando Table Model
Este JTable a nivel visual es igual que el anterior, sin embargo la diferencia radica en la forma de obtener los datos, aqui usamos un constructor sin argumentos y un objeto de tipo DefaultTableModel el cual nos permite definir la forma como llenamos la tabla, tanto en el caso de los encabezados como en la información de esta manera el llenado de los datos se realiza directamente por medio del objeto model que se envia como parametro al metodo que consulta la BD.
Este JTable a nivel visual es igual que el anterior, sin embargo la diferencia radica en la forma de obtener los datos, aqui usamos un constructor sin argumentos y un objeto de tipo DefaultTableModel el cual nos permite definir la forma como llenamos la tabla, tanto en el caso de los encabezados como en la información de esta manera el llenado de los datos se realiza directamente por medio del objeto model que se envia como parametro al metodo que consulta la BD.
private void mostrarDatosConTableModel() {
DefaultTableModel model;
model = new DefaultTableModel();// definimos el objeto tableModel
miTabla2 = new JTable();// creamos la instancia de la tabla
miTabla2.setModel(model);
model.addColumn("Nº Documento");
model.addColumn("Nombre");
model.addColumn("Edad");
model.addColumn("Profesión");
model.addColumn("Telefono");
miTabla2.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
miTabla2.getTableHeader().setReorderingAllowed(false);
PersonaDao miPersonaDao2 = new PersonaDao();
/**
* enviamos el objeto TableModel, como mandamos el objeto
podemos
* manipularlo desde el metodo
*/
miPersonaDao2.buscarUsuariosConTableModel(model);
miBarra2.setViewportView(miTabla2);
}
Con esta tabla vemos que podemos utilizar otros elementos
compatibles con el componente JTable que nos pueden ahorrar muchas
lineas de código, en este caso comparandolo con el anterior nos ahorra un
método con un proceso de mas para obtener el mismo resultado.
PROPIEDAD
MÁS USADA:
● Model: Permite definir el número de columnas y filas del
objeto como también las expresiones que irán en las columnas.
MÉTODOS MÁS USADOS:
● addColumn(): Añade la columna al final de la matriz de
columnas.
● setModel(): Asigna el modelo de datos al objeto JTable.
● GetRowCount(): Devuelve el número de filas en la tabla.
DefaultTableModel
Esta clase permite construir el modelo para el objeto Table.
Los métodos más utilizados son:
● addColumn(): Añade una columna al modelo.
● AddRow(): Añade una
fila al final del modelo.
● getColumnCount(): Devuelve el número de columnas en esta
tabla de datos.
● getRowCount(): Devuelve el número de filas en esta tabla
de datos.
● getValueAt():
Devuelve un valor de atributo para la celda en la posición row, column.
● insertRow(): Inserta una fila en el modelo.
APLICACIÓN
Construir una aplicación que permita calcular el promedio de
las notas obtenidas en el curso de Programación Visual. La aplicación debe
permitir el ingreso del nombre del alumno, la nota de la I Unidad, la nota de
la II Unidad y la nota de la III Unidad. Además debe permitir la selección del
turno a la que pertenece el alumno. A través de un botón de comando debe
agregar los datos en un objeto Jtable, calculando el promedio de las notas; y a
través de otro botón de comando debe eliminar la fila seleccionada en el objeto
JTable. También se debe mostrar el total de filas agregadas en el objeto
JTable.
Solución:
● Usaremos el mismo proyecto utilizado en la sesión anterior
y sólo agregarás un formulario (Jframe).}
Inmediatamente se muestra la siguiente ventana:
● A continuación se muestra el entorno de desarrollo de
NetBeans y no olvides de dar clic en el botón derecho del mouse sobre el
formulario y establece AbsoluteLayout en Set Layout.
Seleccionamos el objeto JComboBox y elegimos en la ventana
de propiedades, la propiedad model que permite colocar los ítems dentro de la
caja de lista desplegadle. Elegimos el botón de comando referido a la propiedad
model se muestra la siguiente ventana:
● Ingresamos “”,“Mañana”, “Tarde” y “Noche” y luego hacemos
click en el botón de comando OK. Continuamos con el diseño del formulario
agregando un botón de comando “Agregar” y un botón de comando “Eliminar”. Luego
procedemos a agregar el objeto JTable.
● Al ser dibujado el objeto JTable se observa en el panel de
la izquierda que se vincula a un objeto JScrollPane. El objeto Jtable tiene
como propiedad principal a model.
● Luego de seleccionar el botón de comando referido a la
propiedad model se muestra la siguiente ventana:
● Observamos en la ventana anterior que por defecto el
objeto Table propone la conformación de
4 columnas y 4 filas, dando la posibilidad de aumentar o disminuir el número de
columnas y filas. Además podemos establecer los títulos de cada columna. Aquí debemos
hacer hincapié que las columnas y las filas son tipo Object esto quiere decir
que un objeto JTable es una matriz de objetos (arreglo bidimensional). Nosotros
vamos a establecer el número de columnas a través de la programación y las
filas se crearán en la medida que se necesiten.
● Los nombres de los objetos de
control dibujados en el formulario queda de la siguiente manera:
● Vamos a proceder a programar. Comenzamos con hacer uso del
paquete swing y específicamente a las clases JoptionPane y a la clase JTable.
● Luego procedemos a crear un modelo para el objeto JTable
llamado Tabla a través de la clase DefaultTableModel. Lo hacemos dentro de la
clase frmNotas. Usar la clase DefaultTableModel es posible gracias al import
javax.swing.table.
Declaramos y creamos una variable de memoria dtm del tipo
DefaultTableModel.
● En el método constructor programamos lo siguiente (sólo
escribe lo que se señala la llave de color rojo):
Declaramos y creamos una variable de memoria titulos del
tipo cadena y es un arreglo. Esta variable titulos se inicializa con los
valores “Alumno”, ”I Unidad”, “II Unidad”, “III Unidad”, “Promedio” y “Turno”,
que serán los títulos de las columnas del objeto JTable. Luego, con el método
setColumnIdentifiers() se define las columnas con sus respectivos títulos en la
variable dtm (modelo del JTable llamado Tabla). Finalmente, se vincula el
modelo, representado en la variable dtm, al objeto JTable llamado Tabla.
● Si en estos
momentos decidimos ejecutar nuestra aplicación, quedaría nuestro formulario
así:
Observamos que el objeto JTable muestra las columnas definas
en la programación hecha en el método constructor.
● Procedamos con la programación del botón de comando
Agregar (sólo escribe lo que se señala la llave de color rojo).
Declaramos y creamos una variable de memoria datos de tipo
String y de tamaño Luego, declaramos las variables de memoria n1, n2, n3 y
total de tipo entero, la variable promedio de tipo double y una variable de
memoria verifica de tipo booleano. Las variables de memoria n1, n2 y n3 reciben
los valores ingresado en los cuadros de textos txtn1, txtn2 y txtn3
respectivamente. Con la variable de memoria verifica se pretende evaluar si se
llegó a escribir en los cuadros de textos y se haya seleccionado un turno. Con
la sentencia IF evaluamos la variable verifica y con el operador ! hacemos
negación, es decir, si la variable verifica es falso entonces con ! se
convierte en verdadero. Si la variable verifica es falso significa que se
ingresó los datos en los cuadros de textos y se seleccionó el turno, entonces
procedemos a calcular el promedio teniendo presente que las variables n1,n2, n3
siendo enteras deben ser tratadas como reales (double). Posteriormente, hacemos
uso del arreglo datos asignando los datos ingresados y el turno seleccionado en
cada uno de los elementos. Con el método addRow() logramos crear una fila con
los valores contenidos con el vector o arreglo datos. Luego, limpiamos los
cuadros de textos y hacemos que el objeto JComboBox quede en al dar el valor
cero al método setSelectedIndex(). Si la variable verifica es verdadero
significa que falta ingresar algún dato o seleccionar el turno. Finalmente, se
muestra la cantidad de filas agregadas en el cuadro de texto txtTotal y
haciendo uso del método setRowCount() perteneciente a dtm.
● Procedamos con la programación del botón de comando
Eliminar.
Declaramos las variables fila y total de tipo entero. La
variable fila se le asigna el valor de la posición de la fila seleccionada en
el objeto Jtable llamado Tabla. Con la sentencia IF se evalúa a la variable
fila si es mayor o igual a cero procedemos a remover o borrar la fila
previamente seleccionad, caso contrario se muestra un mensaje indicando que se
debe seleccionar una fila en la Tabla. Finalmente, se muestra la cantidad de
filas agregadas en el cuadro de texto txtTotal y haciendo uso del método
setRowCount() perteneciente a dtm.
EJEMPLO
import java.awt.Component;
import javax.swing.AbstractCellEditor;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.TableCellEditor;
/**
* @web http://www.jc-mouse.net
* @author Mouse
*/
public
class MyTableCellEditor extends AbstractCellEditor implements TableCellEditor{
private database db;
private String
OldValue=""; //Valor antiguo de la celda
private String
NewValue=""; //valor nuevo de la celda
private String
NameColum="";//nombre
de la columna
private String ID="";//
Llave del registro
private JComponent component = new JTextField();
public MyTableCellEditor(database db, String NameColumn)
{
this.db = db;
this.NameColum =
NameColumn;
}
public Object getCellEditorValue()
{
return ((JTextField)component).getText();
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
OldValue = value.toString();//Toma
valor de celda antes de cualquier modificación
ID = table.getValueAt(row,0).toString();//obtiene
el ID unico del registro
((JTextField)component).setText(value.toString());//coloca
valor de la celda al JTextField
return component;
}
@Override
public boolean stopCellEditing()
{
NewValue = (String)getCellEditorValue();//Captura
nuevo valor de la celda
//Compara
valores, si no son iguales, debe actualizar registro
if( !NewValue.equals(OldValue))
{ //Realiza
la actualizacion
if( !db.update(
NameColum+"='"+NewValue+"'
", ID ) )
{ //Si
existe algun error al actualizar, escribe viejo valor en la celda
JOptionPane.showMessageDialog(null,"Error:
No se puede actualizar");
((JTextField)component).setText(OldValue);
}
}
return
super.stopCellEditing();
}
}
JTABLE
Jtable es una clase que me permite organizar una determinada
información en tabla, esta difiere de una base de datos normal porque al
utilizar Jtable tu puedes visualizar esta tabla, brindándole a el usuario
organización de información, oportunidades de editar y cambiar el tamaño de las
columna entre otras.
El Ejemplo.
Para el ejemplo presentaremos una ventana de registro de
usuarios donde a medida que se diligencia el formulario, se almacenan los datos
en la BD, desde allí se obtendrá la información y se mostrarán los datos.
los JTable son aparentemente iguales, sin embargo
la diferencia está en la forma como los llenamos el primero lo llenaremos
usando lógica de programación, el segundo lo llenaremos con un componente DefaultTableModel.
La Aplicación.
Como se mencionó el ejemplo es simple, tenemos una sección
de registro y una sección donde mostramos los JTable.
Por cuestiones de simplicidad no aplicaremos el MVC de
lleno, sin embargo seguimos usando los patrones DAO y VO para el manejo de la
información, el primero para comunicarnos con la BD y el segundo para
transportar nuestros datos.
Tabla Usuario Matriz
de Datos.
Este JTable lo llenamos aplicando un poquito de
lógica de programación, uno de los constructores de la clase JTable recibe 2
argumentos, el primero es la matriz con los datos a mostrar, el segundo es un
arreglo con los nombres de las columnas, por esa razón lo que hacemos es
obtener los datos de la BD,
PROPIEDAD
MÁS USADA:
● Model: Permite definir el número de columnas y filas del
objeto como también las expresiones que irán en las columnas.
MÉTODOS MÁS USADOS:
● addColumn(): Añade la columna al final de la matriz de
columnas.
● setModel(): Asigna el modelo de datos al objeto JTable.
● GetRowCount(): Devuelve el número de filas en la tabla.
DefaultTableModel
Esta clase permite construir el modelo para el objeto Table.
Los métodos más utilizados son:
● addColumn(): Añade una columna al modelo.
● AddRow(): Añade una
fila al final del modelo.
● getColumnCount(): Devuelve el número de columnas en esta
tabla de datos.
● getRowCount(): Devuelve el número de filas en esta tabla
de datos.
● getValueAt():
Devuelve un valor de atributo para la celda en la posición row, column.
● insertRow(): Inserta una fila en el modelo.
SUMMARY
JTABLE
Jtable is a class that allows me to organize a certain information in a table, this differs from a normal database because when using Jtable you can visualize this table, giving the user information organization, opportunities to edit and resize the columns among other.
The example.
For the example we will present a user registration window where as the form is processed, the data is stored in the DB, from there the information will be obtained and the data will be displayed.
The JTable are apparently the same, however the difference is in the way we fill them first we will fill it using programming logic, the second we will fill it with a DefaultTableModel component.
The application.
As mentioned the example is simple, we have a registry section and a section where we show the JTable.
For simplicity we will not apply the MVC fully, however we continue to use the DAO and VO standards for information handling, the first to communicate with the DB and the second to transport
our data.
User Matrix Table of Data.
This JTable we fill it applying a bit of programming logic, one of the constructors of the class JTable receives 2 arguments, the first is the matrix with the data to be shown, the second is an array with the names of the columns, for that reason What we do is obtain the data of the DB,
MOST USED PROPERTY:
● Model: It defines the number of columns and rows of the object as well as the expressions that will go in the columns.
MOST USED METHODS:
● addColumn (): Adds the column to the end of the column array.
● setModel (): Assigns the data model to the JTable object.
● GetRowCount (): Returns the number of rows in the table.
DefaultTableModel
This class allows constructing the model for the Table object. The most used methods are:
● addColumn (): Adds a column to the model.
● AddRow (): Adds a row to the end of the model.
● getColumnCount (): Returns the number of columns in this data table.
● getRowCount (): Returns the number of rows in this data table.
● getValueAt (): Returns an attribute value for the cell in the row, column position.
● insertRow (): Inserts a row in the model.
Recomendaciones:
Ø
Es un control que nos permite mostrar
la información en el orden que queramos.
Ø
Además funciona como el datagridview
el cual es un control utilizado en visual que si deseas puedes editar la
información mostrado o sino deseas puedes hacerlo que no sea editable.
Ø
Es recomendable porque puedes mostrar
todos los datos que deseas.
Conclusiones:
Ø
En conclusión ente control es de mucha
ayuda para los programadores que sirve para mostrar información.
Ø
Este control también sirve para
registrar información si lo desea.
Ø
Además a este control usted lo podrá
dar el número de columnas y de filas que desee.
Apreciación del Equipo:
Este control es de
mucha ayuda para poder desarrollar software en los cuales se va a tener que
mostrar la información que esta almacenada en la besa de datos o la información
que desea guardar en la base de datos como se da en el caso de los detalles
para que la persona que este manipulando pueda verificar la información
guardada.
LINKOGRAFÍA:
http://www.jc-mouse.net/java/jtable-editable-con-base-de-datos