Obtener registro seleccionado - JTable

Para esta entrada mostraremos un ejemplo de como saber que registro se ha seleccionado en una tabla con datos.

Las clases que son esenciales para este ejemplo son JTable y TableModel.  
JTable: Esta clase es utilizada para mostrar y editar tablas con 2 dimensiones.
JTable utiliza enteros para referirse tanto a las filas y las columnas, y el uso del método getValueAt (int, int) para recuperar los valores.

Exported from Notepad++
JTable tabla = new JTable(datos, columnas);

TableModel: Esta clase es una clase interfaz que contiene un conjunto de métodos que utilizará con JTable para manipulación de los registros.

Exported from Notepad++
TableModel tablaModelo = (TableModel) tabla.getModel();

Para este ejemplo crearemos dos clases:

1- DatosTabla  
2- DatosTablaMain
 
Exported from Notepad++
import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.TableModel; public class DatosTabla extends JPanel { private JTable tabla; private JScrollPane scrollPane; private JButton boton = new JButton("Aceptar"); public DatosTabla(String[] columnas, String[][] datos) { JPanel p = new JPanel(); setLayout(new GridLayout()); tabla = new JTable(datos, columnas); scrollPane = new JScrollPane(tabla); p.add(scrollPane, BorderLayout.PAGE_START); boton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { if ("Aceptar".equals(event.getActionCommand())) { verificarDatos(); } } }); p.add(boton); add(p, BorderLayout.CENTER); } public void verificarDatos() { TableModel tablaModelo; tablaModelo = (TableModel) tabla.getModel(); boolean avanzar = true; int registro = tabla.getSelectedRow(); int columna = tabla.getSelectedColumn(); if (registro == -1) { avanzar = false; } else if (columna == -1) { avanzar = false; } if (avanzar) { String strResultado = tablaModelo.getValueAt( tabla.getSelectedRow(), tabla.getSelectedColumn()).toString(); JOptionPane.showMessageDialog(null, "Dato seleccionado : " + strResultado); } else { JOptionPane.showMessageDialog(null, "No se ha seleccionado un registro"); } } }
Exported from Notepad++
import javax.swing.JFrame; public class DatosTablaMain { public static void main(String args[]) { String columnas[] = {"Código", "Nombre"}; String datos[][] = { {"1", "Ariel"}, {"2", "Solocodigo"}, {"3", "Juez"}, {"4", "Nombre4"} }; DatosTabla datosTabla = new DatosTabla(columnas, datos); JFrame form = new JFrame(); form.add(datosTabla); form.setSize(500, 600); form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); form.setVisible(true); } }

La paciencia vence toda resistencia. La cortesía vence toda oposición. Proverbios 25:15




Resultado:
Fuentes:

3 comentarios:

Debian Drake dijo...

como lo haria mediante una consulta SLQ ,, desde una tabla que tenga en Oracle!!!

Ariel O. Barria dijo...

En este tema muestra un jtable con base datos, en este caso mysql. Pero el comportamiento es el mismo

http://fuentesjava.blogspot.com/2011/08/jtable-checkbox-seleccionado.html

Anónimo dijo...

oyes perdon pero tengo un problema tengo dos formularios una que se llama cliente y otra renta lo que quiero es que en renta en el cmpo nombre y que me aparesca los nombre pero que ya estan registrados en el cliente, aver si me puedes ayudar