Personalización de un JTable en Java
Personalización de un JTable en Java
Autor : Rolando Palermo Rodríguez Cruz on martes, 27 de marzo de 2012 | 3/27/2012
El JTable es un componente del API Swing de Java para desplegar datos en dos dimensiones. Este componente que está desarrollado bajo el patrón MVC
(como el resto de componentes de Java Swing) presenta un modelo y un
renderizador los cuales se encargan de mostrar los registros de una
forma determinanda, sin embargo en muchas de nuestras aplicaciones
queremos personalizar los datos mostrados por lo que se hace necesario
escribir nuestras propias clases para renderizar y gestionar la
información que queremos mostrar. A lo largo de este artículo les
mostraré la forma de cómo hacerlo con unos cuantos sencillos pasos.
Lo primero que debemos hacer es crearnos un proyecto en Netbeans
nombrándolo como mejor nos paresca. Luego crear un paquete que en
nuestro caso le hemos llamado com.blogspot.rolandopalermo.bean y a continuación crear en ese mismo paquete una clase Cliente tal como se muestra en la figura a continuación:
Y el código de esta clase debe quedar como se muestra a continuación:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
| package com.blogspot.rolandopalermo.bean;/** * * @author Rolando */public class Cliente { private int id; private int edad; private String nombre; private String nombreEmpresa; private String nombreContacto; private String direccion; public Cliente(int id, int edad, String nombre, String nombreEmpresa, String nombreContacto, String direccion) { this.id = id; this.edad = edad; this.nombre = nombre; this.nombreEmpresa = nombreEmpresa; this.nombreContacto = nombreContacto; this.direccion = direccion; } public String getDireccion() { return direccion; } public void setDireccion(String direccion) { this.direccion = direccion; } public int getEdad() { return edad; } public void setEdad(int edad) { this.edad = edad; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public String getNombreContacto() { return nombreContacto; } public void setNombreContacto(String nombreContacto) { this.nombreContacto = nombreContacto; } public String getNombreEmpresa() { return nombreEmpresa; } public void setNombreEmpresa(String nombreEmpresa) { this.nombreEmpresa = nombreEmpresa; }} |
Ahora debemos crear una JFrame el cuál se encargará de contener tanto a
nuestra tabla como al resto de nuestros componentes Swing de nuestra
aplicación. Creamos el JFrame VentanaPrincipal.java como se muestra en
el figura siguiente:
Es el turno de nuestro modelo, quién se encargá de manejar las
propiedades de tabulación de nuestra tabla Para esto creamos la clase TablaModeloCliente como se muestra en la figura:
Y su código respectivo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
| package com.blogspot.rolandopalermo.gui;import com.blogspot.rolandopalermo.bean.Cliente;import java.util.ArrayList;import java.util.List;import javax.swing.table.AbstractTableModel;/** * * @author Rolando */public class TablaModeloCliente extends AbstractTableModel { private String[] columnNames = {"DNI", "Nombre", "Edad", "Dirección", "Empresa", "Contacto"}; private List<cliente> clientes = new ArrayList<cliente>(); public void agregarCliente(Cliente cliente) { clientes.add(cliente); fireTableDataChanged(); } public void eliminarCliente(int rowIndex) { clientes.remove(rowIndex); fireTableDataChanged(); } public void limpiarClientes() { clientes.clear(); fireTableDataChanged(); } @Override public String getColumnName(int columnIndex) { return columnNames[columnIndex]; } @Override public int getRowCount() { return clientes.size(); } @Override public int getColumnCount() { return 6; } @Override public Object getValueAt(int rowIndex, int columnIndex) { switch (columnIndex) { case 0: return clientes.get(rowIndex).getId(); case 1: return clientes.get(rowIndex).getNombre(); case 2: return clientes.get(rowIndex).getEdad(); case 3: return clientes.get(rowIndex).getDireccion(); case 4: return clientes.get(rowIndex).getNombreEmpresa(); case 5: return clientes.get(rowIndex).getNombreContacto(); default: return null; } } @Override public Class getColumnClass(int columnIndex) {// return getValueAt(0, columnIndex).getClass(); return String.class; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } @Override public void setValueAt(Object value, int rowIndex, int columnIndex) { Cliente cliente = clientes.get(rowIndex); switch (columnIndex) { case 0: cliente.setId((Integer) value); case 1: cliente.setNombre((String) value); case 2: cliente.setEdad((Integer) value); case 3: cliente.setDireccion((String) value); case 4: cliente.setNombreEmpresa((String) value); case 5: cliente.setNombreContacto((String) value); } fireTableCellUpdated(rowIndex, columnIndex); }} |
Y para renderizar los datos en la grilla, crearemos la clase TablaRenderizadorCliente la cuál determinará las propiedades gráficas y el comportamiento gráfico de las celdas que van a componer la tabla.
Lo que debemos hacer es implementar la interfaz TableCellRenderer.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| package com.blogspot.rolandopalermo.gui;import java.awt.Color;import java.awt.Component;import javax.swing.JLabel;import javax.swing.JTable;import javax.swing.table.TableCellRenderer;/** * * @author Rolando */public class TablaRenderizadorCliente implements TableCellRenderer { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JLabel etiqueta = new JLabel(); etiqueta.setOpaque(true); if (row % 2 == 0) { etiqueta.setBackground(new Color(255, 255, 200)); } else { etiqueta.setBackground(Color.white); } if (column == 1) { String nombre = (String) value; etiqueta.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); if (nombre.startsWith("#")) { //Hombre etiqueta.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/blogspot/rolandopalermo/recursos/user.png"))); // NOI18N } else if (nombre.startsWith("&")) { //Mujer etiqueta.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/blogspot/rolandopalermo/recursos/user2.png"))); // NOI18N } etiqueta.setText(value.toString().substring(1, nombre.length())); } else { etiqueta.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); etiqueta.setText(value.toString()); } if (isSelected) { etiqueta.setBackground(new Color(151, 193, 215)); } return etiqueta; }} |
Con esto ya deberiamos tener la tabla como se muestra en la siguiente figura:
Para establecer el modelo y el renderizador a nuestra tabla deberíamos hacer lo siguiente:
1
2
3
4
| TablaModeloCliente modelo = new TablaModeloCliente();TablaRenderizadorCliente renderizador = new TablaRenderizadorCliente();tablaClientes.setModel(modelo);tablaClientes.setDefaultRenderer(String.class, renderizador); |
Y para finalizar les dejo el enlace del proyecto para descargar.

No hay comentarios:
Publicar un comentario