Swing, como parte de la JFC(Java Foundation Classes), la construcción
de Interfaces Gráficas de Usuario(GUI) recibió un excelente conjunto
de componentes (aproximadamente 40)que la mejoraron: desde el siempre utilizado JButton, hasta el flexible JEditorPane o
el JDesktopPane, pasando por los JTree y los JTable; sin dejar de mencionar
a los JFilechooser y los JDialog, todos ellos, y los componentes restantes,
permiten la creación de aplicaciones con interfaces gráficas más intuitivas y completas.
Swing es el resultado de la unión de esfuerzos entre Netscape, con su Internet Foundation Classes, y SUN. Swing es sólo una parte de la JFC, muchos cometemos el error de creer que Swing y JFC son lo mismo. La JFC contiene también otros elementos, estos son algunos de ellos:
Java 2DSwing, quizá los JTree y las JTable, sean los componentes con APIs más
extensas (la clase JTable tiene más de 100 métodos), y quiza también los más complejos.
Afortunadamente esa complejidad les permite ser también de los componentes Swing
más personalizables y potentes; al igual que en la mayoría de las otras clases Swing
no es necesario conocer todos sus métodos para comenzar a utilizarlos y darles una utilidad práctica.
Como programadores, sabemos muy bien que la presentacion de datos tabulados es una de las tareas más
comunes que se presentan al momento de crear interfaces gráficas; desde la simple tabla que permite
únicamente mostrar el resultado de una consulta, hasta las que permiten editar directamente el contenido de cada
celda, ordenar las columnas, personalizar su apariencia, etc.JTable; por supuesto, mientras más complejo sea el requerimiento a cubrir, se requerirá
en igual medida utilizar más métodos o recursos de la clase.
Este primer artículo:
JTable sencilla para la visualizacion de datos.
JTable con DefaultTableModel como modelo de tabla
JTable con AbstractTableModel como modelo de tabla
API JTable
API DefaultTableModel
API AbstractTableModel
JTable con ejemplos; asi que comenzaremos
creando una tabla sencilla. Esta tabla únicamente mostrará un conjunto de datos
definidos desde su constructor, para ello primero daremos una vistazo rápido a los constructores
que proporciona esta clase; puedes ver al final del artículo con detalle más información.
- JTable()
- JTable(int numRows, int numColumns)
- JTable(Object[][] rowData, Object[] columnNames)
- JTable(TableModel dm)
- JTable(TableModel dm, TableColumnModel cm)
- JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm)
- JTable(Vector rowData, Vector columnNames)
Para este primer ejemplo utilizaremos el 3er. constructor de la lista anterior. El cual
nos permite construir una tabla a partir de dos parámetros; el primero de ellos: rowData es
un array bidimencional de objetos que representa el contenido de la tabla, y el segundo: columnNames representa
los nombres de cada columna, contenidos también en un array que por lo general es un array de String's.
Nuestro primer ejemplo tendra las siguientes columnas:
String[] columnNames =
{"Nombre", "Apellido", "Pasatiempo", "Años de Practica", "Soltero(a)"};
Y utilizaremos el siguiente array para su contenido:
Object[][] data = {
{"Mary", "Campione", "Esquiar", new Integer(5), new Boolean(false)},
{"Lhucas", "Huml", "Patinar", new Integer(3), new Boolean(true)},
{"Kathya", "Walrath", "Escalar", new Integer(2), new Boolean(false)},
{"Marcus", "Andrews", "Correr", new Integer(7), new Boolean(true)},
{"Angela", "Lalth", "Nadar", new Integer(4), new Boolean(false)}
};
El constructor, entonces queda asi:
JTable table = new JTable(data, columnNames);El código completo de nuestro primer ejemplo es el siguiente:
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
public class SimpleTable1 extends JFrame {
public SimpleTable1() {
super("Ejemplo 1");
//array bidimencional de objetos con los datos de la tabla
Object[][] data = {
{"Mary", "Campione", "Esquiar", new Integer(5), new Boolean(false)},
{"Lhucas", "Huml", "Patinar", new Integer(3), new Boolean(true)},
{"Kathya", "Walrath", "Escalar", new Integer(2), new Boolean(false)},
{"Marcus", "Andrews", "Correr", new Integer(7), new Boolean(true)},
{"Angela", "Lalth", "Nadar", new Integer(4), new Boolean(false)}
};
//array de String's con los títulos de las columnas
String[] columnNames = {"Nombre", "Apellido", "Pasatiempo",
"Años de Practica", "Soltero(a)"};
//se crea la Tabla
final JTable table = new JTable(data, columnNames);
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
//Creamos un JscrollPane y le agregamos la JTable
JScrollPane scrollPane = new JScrollPane(table);
//Agregamos el JScrollPane al contenedor
getContentPane().add(scrollPane, BorderLayout.CENTER);
//manejamos la salida
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
SimpleTable1 frame = new SimpleTable1();
frame.pack();
frame.setVisible(true);
}
}

arrays pudimos haber utizado vectores y utilizado el ultimo de los constructores
de la lista mostrada anteriormente.
Aunque la manerá más sencilla de construir tablas es utilizando cualquiera
de los siguientes constructores:
- JTable(Object[][] rowData, Object[] columnNames)
- JTable(Vector rowData, Vector columnNames)
Su utilización presenta unas desventajas que debemos tener en cuenta:
tabla se tienen que tener de antemano
los datos que queremos que contenga la tabla ya sea en un array o en un vector, lo que le resta flexibilidad
al llenado de la tabla; ya que quizás en un momento dado, sería mucho más práctico y rápido, colocar directamente los datos en la tabla
y no tener que colocarlos antes en un array o vectortabla, son tratados como de un mismo tipo de datos. A pesar
de que hemos declarado columnas como Boolean o Integer, todas nuestas celdas muestran su contenido como String's
Los modelos de tabla son objetos que implementan la interface TableModel; a través
de ellos es posible personalizar mucho más y mejor el comportamiento de los componentes JTable,
permitiendo utilizar al máximo sus potencialidades.
Todas las tablas cuentan con un modelo de tabla , aunque en el ejemplo 1 no se haya especificado, existe uno por omisión
El siguiente gráfico intenta mostrar como cada componente JTable
obtiene siempre sus datos desde un modelo de tabla .
La clase AbstractTableModel es la que implementa directamente a la interface TableModel,
aunque es esta clase la que se recomienda extender para utilizarla como modelo de tabla, existe un
modelo de tabla predeterminado que facilita mucho el trabajo con tablas. Este modelo predeterminado
es la clase DefaultTableModel
java.lang.Object
|
+-javax.swing.table.AbstractTableModel
|
+-javax.swing.table.DefautTableModel
Nuevamente, antes de comenzar a utilizar esta clase, veremos cuales son los constructores con que cuenta:
- DefaultTableModel()
- DefaultTableModel(int numRows, int numColumns)
- DefaultTableModel(Object[][] data, Object[] columnNames)
- DefaultTableModel(Object[] columnNames, int numRows)
- DefaultTableModel(Vector columnNames, int numRows)
- DefaultTableModel(Vector data, Vector columNames)
Utilizaremos el constructor que nos permite crear un DefaultTableModel, a partir
de los datos con que ya contamos del ejemplo anterior:
Object[][] data = {
{"Mary", "Campione",
"Esquiar", new Integer(5), new Boolean(false)},
{"Lhucas", "Huml",
"Patinar", new Integer(3), new Boolean(true)},
{"Kathya", "Walrath",
"Escalar", new Integer(2), new Boolean(false)},
{"Marcus", "Andrews",
"Correr", new Integer(7), new Boolean(true)},
{"Angela", "Lalth",
"Nadar", new Integer(4), new Boolean(false)}
};
String[] columnNames = {"Nombre",
"Apellido",
"Pasatiempo",
"Años de Practica",
"Soltero(a)"};
Por lo tanto, el constructor queda asi:
DefaultTableModel dtm= new DefaultTableModel(data, columnNames);
Despues de haber creado el modelo de tabla, dtm en el ejemplo , se crea la tabla con
el constructor correspondiente:
final JTable table = new JTable(dtm);
Una vez hecho esto, cualquier modificación que se realice sobre el modelo de tabla
se reflejará directamente en la tabla. Así, podemos agregar una columna:
String[] newColumn= {"Flan",
"Pastel",
"Helado",
"Barquillo"
"Manzana" };
dtm.addColumn("Postre",newColumn);
una fila:
Object[] newRow={"Pepe", "Grillo",
"Tenis", new Integer(5), new Boolean(false), "Pera"};
dtm.addRow(newRow);
o modificar una celda en especial, en este ejemplo la celda ubicada en la columna 1, fila 1:
dtm.setValueAt("Catherine", 1, 1);
Puedes revisar los métodos que proporciona la clase DefaultTableModel para conocer que otras
cosas puedes realizar con ella.
A continuación se presenta el listado completo del código que muestra el uso
del modelo de tabla DefaultTableModel :
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
public class SimpleTable2 extends JFrame {
public SimpleTable2() {
super("Ejemplo 2");
//array bidimencional de objetos con los datos de la tabla
Object[][] data = {
{"Mary", "Campione",
"Esquiar", new Integer(5), new Boolean(false)},
{"Lhucas", "Huml",
"Patinar", new Integer(3), new Boolean(true)},
{"Kathya", "Walrath",
"Escalar", new Integer(2), new Boolean(false)},
{"Marcus", "Andrews",
"Correr", new Integer(7), new Boolean(true)},
{"Angela", "Lalth",
"Nadar", new Integer(4), new Boolean(false)}
};
//array de String's con los títulos de las columnas
String[] columnNames = {"Nombre",
"Apellido",
"Pasatiempo",
"Años de Practica",
"Soltero(a)"};
//creamos el Modelo de la tabla con los datos anteriores
DefaultTableModel dtm= new DefaultTableModel(data, columnNames);
//se crea la Tabla con el modelo DefaultTableModel
final JTable table = new JTable(dtm);
// una vez creada la tabla con su modelo
// podemos agregar columnas
String[] newColumn= {"Flan",
"Pastel",
"Helado",
"Barquillo"
"Manzana" };
dtm.addColumn("Postre",newColumn);
//filas
Object[] newRow={"Pepe", "Grillo",
"Tenis", new Integer(5), new Boolean(false), "Pera"};
dtm.addRow(newRow);
//o modificar una celda en especifico
dtm.setValueAt("Catherine", 1, 1);
//se define el tamaño
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
//Creamos un JscrollPane y le agregamos la JTable
JScrollPane scrollPane = new JScrollPane(table);
//Agregamos el JScrollPane al contenedor
getContentPane().add(scrollPane, BorderLayout.CENTER);
//manejamos la salida
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
SimpleTable2 frame = new SimpleTable2();
frame.pack();
frame.setVisible(true);
}
}
El resultado de ejecutar el ejemplo anterior será:

Aquí tenemos otro ejemplo con DefaultTableModel:
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
public class SimpleTable3 extends JFrame {
public SimpleTable3() {
super("Ejemplo 3");
//creamos el arreglo de objetos que contendra el
//contenido de las columnas
Object[] data = new Object[5];
// creamos el modelo de Tabla
DefaultTableModel dtm= new DefaultTableModel();
// se crea la Tabla con el modelo DefaultTableModel
final JTable table = new JTable(dtm);
// insertamos las columnas
for(int column = 0; column < 5; column++){
dtm.addColumn("Columna " + column);
}
// insertamos el contenido de las columnas
for(int row = 0; row < 10; row++) {
for(int column = 0; column < 5; column++) {
data[column] = "Celda " + row + "," + column;
}
dtm.addRow(data);
}
//se define el tamaño
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
//Creamos un JscrollPane y le agregamos la JTable
JScrollPane scrollPane = new JScrollPane(table);
//Agregamos el JScrollPane al contenedor
getContentPane().add(scrollPane, BorderLayout.CENTER);
//manejamos la salida
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
SimpleTable3 frame = new SimpleTable3();
frame.pack();
frame.setVisible(true);
}
}
En este segundo ejemplo del uso de la clase DefaultTableModel, creamos primeramente
un array de objetos llamado data que podrá contener 5 elementos.
Object[] data = new Object[5];Despues creamos un modelo de tabla llamado
dtm:
DefaultTableModel dtm= new DefaultTableModel();
Antes de cualquier operacion sobre el modelo de tabla, debemos crear la tabla que lo utilizará:
final JTable table = new JTable(dtm);
Ahora, al modelo de tabla le agregamos 5 columnas:
for(int column = 0; column < 5; column++){
dtm.addColumn("Columna " + column);
}
Y por ultimo, insertamos el contenido de las celdas, columna por columna:
for(int row = 0; row < 10; row++) {
for(int column = 0; column < 5; column++) {
data[column] = "Celda " + row + "," + column;
}
dtm.addRow(data);
}
En el fragmento de código anterior, en lugar de hacer una sencilla asignación
de valores consecutivos a cada celda dentro del ciclo for, podrías estar leyendo y asignando directamente
el contenido de: un archivo de texto, una consulta a una base de datos, o alguna otra fuente;
ya que, como hemos visto, también es posible agregar filas completas a la tabla.
La siguiente figura muestra el resultado de ejecutar el Ejemplo 3.

tabla. Sin embargo, las celdas siguen siendo
editables, y sus valores siguen siendo tratados aún como String's.
Cuando utilices el modelo de tabla DefaultTableModel
debes tener en cuenta que: éste utiliza un vector de
vectores para almacenar los valores de las celdas de la tabla,
tiene un desempeño inferior al de un modelo de tabla personalizado, debido
a que sus métodos estan sincronizados y que
además
en la documentación oficial, se menciona que
la serialización de objetos que realiza esta clase no será compatible con entregas futuras de Swing
Así, aunque la utilización del modelo de tabla DefaultTableModel es aún
funcional y proporciona facilidades para la utilizacion de un modelo de tabla, es mucho
más recomendable, por cuestiones de desempeño y personalización, utilizar la clase AbstractTableModel
AbstractTableModel.
class MyTableModel extends AbstractTableModel {
.....
}
Después, debemos de implementar los 3 métodos siguientes:
class MyTableModel extends AbstractTableModel {
public int getRowCount(){
...
}
public int getColumnCount(){
...
}
public Object getValueAt(int row, int column){
...
}
}
Con la implementación de los métodos anteriores, las celdas de la tabla NO serán
editables y NO se podrán modificar los valores de cada una de ellas.
Si deseamos tener un mecanismo para modificar los valores de las celdas de la tabla,
tenemos que sobrescribir el método setValueAt de la clase AbstractTableModel:
class MyTableModel extends AbstractTableModel {
public int getRowCount(){
...
}
public int getColumnCount(){
...
}
public Object getValueAt(int row, int column){
...
}
public void setValueAt(Object value, int row, int col) {
...
}
}
Y, si la modificación de los valores de las celdas, se hace directamente sobre ellas,
necesitamos indicar a nuestro modelo de tabla que las celdas de la tabla
serán editables, esto se hace sobrescribiendo el método isCellEditable:
class MyTableModel extends AbstractTableModel {
public int getRowCount(){
...
}
public int getColumnCount(){
...
}
public Object getValueAt(int row, int column){
...
}
public void setValueAt(Object value, int row, int col){
...
}
public boolean isCellEditable(int row, int col) {
...
}
}
Más adelante puedes revisar los métodos restantes que proporciona la clase AbstractTableModel
Ya lo único que haría falta sería agregar los nombres de las columnas de nuestra tabla
y definir su contenido inicial:
class MyTableModel extends AbstractTableModel {
final String[] columnNames = {
...
}
final Object[][] data = {
...
}
public int getRowCount(){
...
}
public int getColumnCount(){
...
}
public Object getValueAt(int row, int column){
...
}
public void setValueAt(Object value, int row, int col){
...
}
public boolean isCellEditable(int row, int col) {
...
}
}
JTable invoca un método del modelo de tabla para determinar el editor/renderer predeterminado
que utilizará para mostrar el valor de cada celda. Por ejemplo para celdas con valores booleanos
utilizará check box's; este método es: getColumnClass, y también es recomendable implementarlo:
class MyTableModel extends AbstractTableModel {
final String[] columnNames = {
...
}
final Object[][] data = {
...
}
public int getRowCount(){
...
}
public int getColumnCount(){
...
}
public Object getValueAt(int row, int column){
...
}
public void setValueAt(Object value, int row, int col){
...
}
public boolean isCellEditable(int row, int col) {
...
}
public Class getColumnClass(int c) {
...
}
}
Ahora, despues de saber cuales son los métodos que se necesitan implementar y sobrescribir de la clase AbstractTableModel
para crear nuestro propio modelo de tabla; veremos un ejemplo
que nos muestra ya completa la definicion de la clase:
class MyTableModel extends AbstractTableModel {
final String[] columnNames = {"Nombre",
"Apellido",
"Pasatiempo",
"Años de Practica",
"Soltero(a)"};
final Object[][] data = {
{"Mary", "Campione",
"Esquiar", new Integer(5), new Boolean(false)},
{"Lhucas", "Huml",
"Patinar", new Integer(3), new Boolean(true)},
{"Kathya", "Walrath",
"Escalar", new Integer(2), new Boolean(false)},
{"Marcus", "Andrews",
"Correr", new Integer(7), new Boolean(true)},
{"Angela", "Lalth",
"Nadar", new Integer(4), new Boolean(false)}
};
//únicamente retornamos el numero de elementos del
//array de los nombres de las columnas
public int getColumnCount() {
return columnNames.length;
}
//retormanos el numero de elementos
//del array de datos
public int getRowCount() {
return data.length;
}
//retornamos el elemento indicado
public String getColumnName(int col) {
return columnNames[col];
}
//y lo mismo para las celdas
public Object getValueAt(int row, int col) {
return data[row][col];
}
/*
* Este metodo sirve para determinar el editor predeterminado
* para cada columna de celdas
*/
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
/*
* No tienes que implementar este método a menos que
* las celdas de tu tabla sean Editables
*/
public boolean isCellEditable(int row, int col) {
return true;
}
/*
* No tienes que implementar este método a menos que
* los datos de tu tabla cambien
*/
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
}
Si estas utilizando una versión del JDK anterior a la 1.3, debes hacer
las siguentes modificaciones al método setValueAt, ya que
antes de esta version era necesario crear manualmente un
Integer a partir del valor recibido, ya que de otra manera,
el valor recibido se seguiría convirtiendo a un String, a partir de la
Ver. 1.3, la conversion a Intenger es automática.
//Version del metodo setValuAt para JDK's anteriores a la Ver.1.3
public void setValueAt(Object value, int row, int col) {
if (data[0][col] instanceof Integer
&& !(value instanceof Integer)) {
try {
data[row][col] = new Integer(value.toString());
fireTableCellUpdated(row, col);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(SimpleTable4.this,
"The \"" + getColumnName(col)
+ "\" column accepts only integer values.");
}
} else {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
}
Una vez creada nuestra clase podemos instanciarla, y utilizarla para construir una
Nota: Observa se hace una llamada al método fireTableCellUptaded(row,col)dentro del métodosetValueAtexactamente después de haber asignado un nuevo valor a la celda especificada; esto es debido a que, como estamos implementando directamente los métodos de la claseAbstracTableModel, debemos notificar explícitamente que una celda determinada a sido modificada para que se actualice debidamente la vista de latabla.
Puedes revisar cuales son los otros métodosfireXXXque proporciona la claseAbstracTableModelpara realizar las notificaciones adecuadas que indican modificación sobre latabla.
tabla, asi:
MyTableModel myModel = new MyTableModel();
JTable table = new JTable(myModel);
El siguiente codigo, muestra la utilización de la clase MyTableModel;
en este ejemplo, ésta clase aparece en la aplicacion principal como una clase secundaria:
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.JScrollPane;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.JOptionPane;
import java.awt.*;
import java.awt.event.*;
public class SimpleTable4 extends JFrame {
public SimpleTable4() {
super("SimpleTable4");
MyTableModel myModel = new MyTableModel();
JTable table = new JTable(myModel);
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
//Creatamos un contenedor para la Tabla
JScrollPane scrollPane = new JScrollPane(table);
//Agregamos nuestra tabla al contenedor
getContentPane().add(scrollPane, BorderLayout.CENTER);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
class MyTableModel extends AbstractTableModel {
final String[] columnNames = {"Nombre",
"Apellido",
"Pasatiempo",
"Años de Practica",
"Soltero(a)"};
final Object[][] data = {
{"Mary", "Campione",
"Esquiar", new Integer(5), new Boolean(false)},
{"Lhucas", "Huml",
"Patinar", new Integer(3), new Boolean(true)},
{"Kathya", "Walrath",
"Escalar", new Integer(2), new Boolean(false)},
{"Marcus", "Andrews",
"Correr", new Integer(7), new Boolean(true)},
{"Angela", "Lalth",
"Nadar", new Integer(4), new Boolean(false)}
};
//únicamente retornamos el numero de elementos del
//array de los nombres de las columnas
public int getColumnCount() {
return columnNames.length;
}
//retormanos el numero de elementos
//del array de datos
public int getRowCount() {
return data.length;
}
//retornamos el elemento indicado
public String getColumnName(int col) {
return columnNames[col];
}
//y lo mismo para las celdas
public Object getValueAt(int row, int col) {
return data[row][col];
}
/*
* Este metodo sirve para determinar el editor predeterminado
* para cada columna de celdas
*/
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
/*
* No tienes que implementar este método a menos que
* las celdas de tu tabla sean Editables
*/
public boolean isCellEditable(int row, int col) {
return true;
}
/*
* No tienes que implementar este método a menos que
* los datos de tu tabla cambien
*/
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
}
public static void main(String[] args) {
SimpleTable4 frame = new SimpleTable4();
frame.pack();
frame.setVisible(true);
}
}
El resultado de ejecutar el código anterior es el siguiente:

getColumnClass.
| Resumen de los Campos | ||
|---|---|---|
| Campo | Descripción | |
static int |
AUTO_RESIZE_ALL_COLUMNS | Proporciona el Cambio de tamaño de Todas las columnas durante las operaciones de cambio de tamaño |
static int |
AUTO_RESIZE_LAST_COLUMN | Durante todas las operaciones de cambio de tamaño, aplica el ajuste únicamente a la última columna |
static int |
AUTO_RESIZE_NEXT_COLUMN | Cuando una columna se ajusta, este campo ajusta la siguiente, de forma opuesta |
static int |
AUTO_RESIZE_NEXT_OFF | Utiliza una barra de desplazamiento para ajustar el ancho de la columna |
static int |
AUTO_RESIZE_SUBSEQUENT_COLUMNS | Cambia las columnas siguientes para preservar el ancho total; este es el comportamiento por omisión |
protected boolean |
autoCreateColumnsFromModel | Si tiene el valor de true, la tabla consulta al TableModel para construir el conjunto de columnas |
protected int |
AutoResizeMode | Determina si la tabla cambia automáticamente el tamaño de la anchura de sus columnas para ocupar el ancho total de la tabla |
protected TableCellEditor |
cellEditor | Un objeto que sobrescribe la celda actual y permite al usuario cambiar sus contenidos |
protected boolean |
cellSelectionEnabled | Obsoleto desde la versión 1.3 |
protected TableColumnModel |
columnModel | El TableColumnModel de la tabla |
protected TableModel |
dataModel | El TableModel |
protected Hashtable |
defaultEditorsByColumnClass | Una tabla de objetos que muestra y edita el contenido de cada celda,indexado
por clase como esta declarado en getColumnClass en la interface
TableModel |
protected Hashtable |
defaultRenderersByColumnClass | Una tabla de objetos que muestra el contenido de cada celda,indexado
por clase como esta declarado en getColumnClass en la interface
TableModel |
protected int |
editingColumn | Identifica la columna de la celda que esta siendo editada |
protected int |
editingRow | Identifica la Fila de la celda que esta siendo editada |
protected Component |
editorComp | El componente que procesa la edición |
protected Color |
gridColor | El color de la rejilla(grid) |
protected Dimension |
preferredViewportSize | Utilizado por la interface Scrollable para determinar el area
inicial visible |
protected int |
rowHeight | La altura -en pixeles- de las filas de la tabla |
protected int |
rowMargin | La altura -en pixeles- del margen entre las celdas en cada fila |
protected boolean |
rowSelectionAllowed | Devuelve true si se permite selección de fila en esta tabla |
protected Color |
selectionBackground | El color de fondo de las celdas seleccionadas |
protected Color |
selectionForeground | El color de primer plano de las celdas seleccionadas |
protected ListSelectionModel |
selectionModel | El ListSelectionModel de la tabla; se utiliza para controlar las
filas seleccionadas |
protected boolean |
showHorizontalLines | Las líneas horizontales se dibujan entre las celdas cuando el campo
esta en true |
protected boolean |
showVerticallLines | Las líneas verticales se dibujan entre las celdas cuando el campo
esta en true |
protected JTableHeader |
tableHeader | El JTableHeader que funciona con la tabla |
| Constructores | |
|---|---|
| Constructor | Descripción |
JTable() |
Construye un JTable() predeterminado |
JTable(int numRows, int numColumns) |
Construye un JTable()con numRows y
numColumns de celdas vacías, utilizando DefaultTableModel |
JTable(Object[][] rowData, Object[] columnNames) |
Construye un JTable() visualizando los valores de rowData
en una matriz bidimencional, utilizando columnNames como nombres
para las columnas |
JTable(TableModel dm) |
Construye un JTable() con dm como modelo de tabla,
un modelo de columna predeterminado y un modelo de seleccion predeterminado |
JTable(TableModel dm, TableColumnModel cm) |
Construye un JTable() con dm como modelo de tabla,
cm como modelo de columna y un modelo de seleccion predeterminado |
JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm) |
Construye un JTable() con dm como modelo de tabla,
cm como modelo de columna y sm como modelo de selección |
JTable(Vector rowData, Vector columnNames) |
Construye un JTable() para visualizar los valores del Vector
de Vectores, rowData, con nombres de columnas dados en columnNames |
| Métodos | ||
|---|---|---|
| Método | Descripción | |
void |
addColumn(TableColumn aColumn) | Añade la columna aColumn al final de la matriz de columnas |
void |
addColumnSelectionInterval(int index0, int index1) | Añade las columnas desde index0 a index1,
incluidam a la selección actual |
void |
addNotify() | llama al método configureEnclosingScrollPane |
void |
addRowSelectinInterval(int index0, int index1) | Añade las filas desde index0 a index1,incluida, a la selección actual |
void |
clearSelection() | Deselecciona todas las columnas y filas seleccionadas |
void |
columnAdd(TableColumnModelEvent e) | Invocado cuando una columna es agregada al modelo de columa |
int |
columnAtPoint(Point point) | Obtiene el índice de la columna en que point reside, o -1 si esta
fuera del rango[0, getcolumn()-1] |
void |
columnMarginChanged(ChangeEvent e) | Invocado cuando una columna se mueve debido al cambio de margenes |
void |
columnMoved(TableColumnModelEvent e) | Invocado cuando una columna cambia de posición |
void |
columnRemoved(TableColumnModelEvent e) | Invocado cuando una columna es removida del modelo de columnas actual |
void |
columnSelectionChanged(ListSelectionEvent e) | Invodado cuando el modelo de selección del TableColumnModel a cambiado |
protected void |
configureEnclosingScrollPane() | Configura los JScrollPane constenidos instalando el TableHeader
de la tabla, columnHeaderView del panel de desplazamiento y así sucesivamente |
int |
convertColumnIndextoModel(int viewColumnIndex) | Mapea el indice de la columna de la vista en viewColumnIndex
al índice de la columna en el modelo de la tabla |
int |
convertColumnIndexToView(int modelColumnIndex) | Mapea el indice de la columna en el modelo de tabla en modelColumnIndex
al índice de la columna en la vista |
protected TableColumnModel |
createDefaultColumnModel() | Obtiene el modelo de objeto de columna predeterminado, que es un
DefaultTableColumnModel |
void |
createDefaultColumnsFromModel() | Crea columnas predeterminadas para la tabla a partir del modelo de datos utilizando
los métodos getColumnCount() y getColumnClass() definidos en la interface
TableModel |
protected TableModel |
createDefaultDataModel() | Obtiene el modelo de objetos de la tabla predeterminado, que es un
DefaultTableModel |
protected void |
createDefaultEditors() | Crea editores de celdas predeterminados para objetos, números y
boolenos |
protected void |
createDefaultRenderers() | Crea renderizadores predeterminados para objetos, números, doubles,
dates, booleanos, e iconos |
protected ListSelectionModel |
createDefaultSelectionModel() | Devuelve el modelo de selección de objetos predeterminado, que es un
DefaultSelectionModel |
static JScrollPane |
createScrollPaneForTable(JTable a table) | Obsoleto. Reemplazado por JScrollPane(aTable) |
boolean |
editCellAt(int row, int col) | Inicia la edición en la celda situada en row, col, si ésta es
editable |
boolean |
editCellAt(int row, int col, EventObject e) | Inicia la edición en la celda situada en row, col, si ésta es
editable |
void |
editingCanceled(ChangeEvent e) | llamado cuando la edición se cancela |
void |
editingStoped(ChangeEvent e) | llamado cuando termina la edición |
AccessibleContext |
getAccessibleContext() | Obtiene el AccessibleContext asociado con la JTable |
boolean |
getAutoCreateFromModel() | Determina si la tabla es capaz de crear colunas predeterminadas a partir del modelo actual |
int |
getAutoResizeMode() | Obtiene el modo de cambio de tamaño automático de la tabla |
TableCellEditor |
getCellEditor() | Devuelve el cellEditor |
TableCellEditor |
getCellEditor(int row, int column) | Obtiene el editor adecuado para la celda situada en row y column |
Rectangle |
getCellRect(int row, int column, boolean includeSpacing) | Devuelve un Rectangle que localiza la celda que reside en la
intersección de row y column |
TableCellRenderer |
getCellRenderer(int row, int column) | Devuelve un rederizador adecuado para la celda ubicada en row
y column |
boolean |
getCellSelectionEnabled() | Devuelve true si la seleccion de columnas y filas esta habilitada |
TableColumn |
getColumn(Object identifier) | Devuelve el objeto TableColumn para la columna en la tabla cuyo
indicador sea igual a identifier, cuando se compara utilizando
equals |
Class |
getColumnClass(int column) | Devuelve el tipo de columna en una posición de la vista dada |
int |
getColumnCount() | Devuelve el número de columnas del modelo de columna(éste numero puede ser distinto del número de columnas en el modelo de la tabla) |
TableColumnModel |
getColumnModel() | Devuelve el TableColumnModel que contiene toda la información
de columnas de la tabla |
String |
getColumnName(int column) | Obtiene el nombre de la columna en la posición column de la vista
actual |
boolean |
getColumnSelectionAllowed() | Devuelve true si se pueden seleccionas las columnas |
TableCellEditor |
getDefaultEditor(Class columnClass) | Devuelve el editor que se debe utilizar cuando no se ha configurado nigún editor en un
TableColumn |
TableCellRenderer |
getDefaultRenderer(Class columnClass) | Devuelve el renderizador que se debe utilizar cando no se ha seleccionado un renderizador en un
TableColumn |
int |
getEditingColumn() | Devuelve el índice de la columna de la celda que se encuentra actualmente en edición |
int |
getEditingRos() | Devuelve el índice de la fila de la celda que se encuentra actualmente en edición |
Component |
getEditorComponent() | Devuelve el componente que esta manejando la sesión de edición |
Color |
getGridColor() | Devuelve Devuelve el color utilizado para dibujar las líneas de la rejilla |
Dimension |
getInterCellSpacing() | Devuelve el espaciamiento vertical y horizontal entre celdas |
TableModel |
getModel() | Retorna el TableModel que proporciona los datos mostrados por el
receptor |
Dimension |
getPreferredScrollableViewPortSize() | Devuelve el tamaño predefinido del ViewPort para la tabla |
int |
getRowCount() | Devuelve el número de filas en la tabla |
int |
getRowHeght() | Devuelve la altura, en pixeles, de una fila de la tabla |
int |
getRowMargin() | Devuelve la cantidad de espacio libre entre las filas |
boolean |
getRowSelectionAllowed() | Devuelve true si se pueden seleccionas las filas |
int |
getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) | Devuelve el visibleRect.height o visibleRect.width
dependiendo de la orientación de la tabla |
boolean |
getScrollableTracksViewportHeight() | Devuelve true si la altura del ViewPort no determina
la altura de la tabla |
boolean |
getScrollableTracksViewportWidth() | Devuelve true si la anchura del ViewPort no determina
la anchura de la tabla |
int |
getScrollableUnitIncrement(Rectangle visibleRect, int orientatio, int direction) | Devuelve el incremento en desplazamiento, en pixeles, que expone completamente una nueva fila o columna |
int |
getSelectedColumn() | Devuelve el índice de la primera columna seleccionada ó -1 si
no hay columna seleccionada |
int |
getSelectedColumnCount() | Devuelve el número de columnas seleccionadas |
int [] |
getSelectedColumns() | Obtiene los índices de todas las columnas seleccionadas |
int |
getSelectedRow() | Devuelve el índice de la primera fila seleccionada ó -1 si
no existen filas seleccionadas |
int |
getSelectedRow() | Devuelve el número de filas seleccionadas |
int [] |
getSelectedRows() | Obtiene los índices de todas las filas seleccionadas |
Color |
getSelectionBackground() | Obtiene el color de fondo para las celdas seleccionadas |
Color |
getSelectionForeground() | Obtiene el color de primer plano para las celdas seleccionadas |
ListSelectionModel |
getSelectionModel() | Obtiene el ListSelectionModel que se utiliza para mantener el estado
de selección de la fila |
boolean |
getShowHorizontalLines() | Devuelve true si el recetor dibuja líneas horizontales entre las celdas y
false si no es así |
boolean |
getShowVerticaltalLines() | Devuelve true si el recetor dibuja líneas verticales entre las celdas y
false si no es así |
JTableHeader |
getTableHeader() | Devuelve el tableHeaderutilizado por la tabla |
TableUI |
getUI() | Devuelve el objeto L&F que renderiza este componente |
Object |
getValueAt(int row, int column) | Devuelve el valor de la celda ubicada en row, column |
protected void |
initializeLocalVars() | Inicia las propiedades de tabla con sus valores predeterminados |
boolean |
isCellEditable(int row, int column) | Devuelve true si la celda ubicada en row, column
puede editarse |
boolean |
isCellSelected(int row, int column) | Devuelve true si la celda ubicada en row, column
esta seleccionada |
boolean |
isColumnSelected(int column) | Devuelve true si la columna ubicada en column
esta seleccionada |
boolean |
isEditing() | Devuelve true si la tabla esta editando una celda |
boolean |
isManagingFocus() | Sobrescrito para devolver true |
boolean |
isRowSelected(int row) | Devuelve true si la fila ubicada en row
esta seleccionada |
void |
moveColumn(int column, int targetColumn) | Mueve la columna column a la posición ocupada actualmente por
la columna targetColumn |
protected String |
paramString() | Devuelve una representacion en String de la Tabla |
Component |
prepareEditor(TableCellEditor editor, int row, int column) | Prepara el editpr dado utilizando el valor de la celda dada |
Component |
prepaRenderer(TableCellRenderer renderer, int row, int column) | Prepara el renderizador dado con un valor adecuado del DataModel |
protected boolean |
processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) | Invocado para procesar el conjunto de teclas para ks, como
resultado de procesar KeyEvent e |
void |
removeColumn(TableColumn aColumn) | Elimina la columna aColumn de la matiz de columnas de la
JTable |
void |
removeColumnSelectionInterval(int index0, int index1) | Deselecciona las columnas, desde index0hasta
index1, incluyendolo |
void |
removeEditor() | Descarta el objeto editor |
void |
removeRowSelectionInterval(int index0, int index1) | Deselecciona las filas, desde index0hasta
index1, incluyendolo |
protected void |
resizeAndRepaint() | Equivalente a llamar a revalidate() seguido de repaint() |
int |
rowAtPoint(Point point) | Devuelve el índice de la fila sobre la cual se situua el punto point,
-1 si el resultado no esta en el rango [0, getColumnCount()-1] |
void |
selectAll() | Selecciona todas las columnas, filas y celdas en la tabla |
void |
setAutoCreateColumnsFromModel() | Asingna el indicador autocreateColumnsFromModel de la tabla |
void |
setAutoResize() | Activa el modo de cambio de tamaño automático de la tabla cuando ésta cambia de tamaño |
void |
setCellEditor(TableCellEditor anEditor) | Asigna la variable cellEditor |
void |
setCellSelectionEnabled(boolean flag) | Determina si la tabla permitirá tanto la selección de filas como de columnas al mismo tiempo |
void |
setColumnModel() | Asigna el modelo de columna para esta tabla a newModel y registra receptores
de notificación para el nuevo modelo de columna |
void |
setColumnSelectionAllowed(boolean flag) | Asigna si las columnas de esta tabla pueden ser seleccionadas |
void |
setColumnSelectionInterval(int index0, int index1) | Selecciona las columnas desde index0, hasta index1, incluido |
void |
setDefaultEditor(Class columnClass, TableCellEditor editor) | Asigna el editor predeterminado que debe utilizarse si no se asigna un editor a un
TableColumn |
void |
setDefaultRenderer(Class columnClass, TableCellRenderer renderer) | Asigan un renderizador predeterminado que se utilizará si no se asigna un
renderizador a TableColumn |
void |
setEditingColumn(int acolumn) | Asigna la variable editingColumn |
void |
setEditingRow(int aRow) | Asigna la variable editingRow |
void |
setGridColor(Color newColor) | Asigna el color utilizado para dibujar las líneas de la rejilla con
newColor y visualiza de nuevo el receptor |
void |
setIntercellSpacing(Dimension newSpacing) | Asigna la anchura y altura entre las celdas a newSpacing
y dibuja de nuevo el receptor |
void |
setModel(TableModel newModel) | Asigna el modelo de datos para esta tabla a newModel y registra
los receptores de modificaciones para el nuevo modelo de datos |
void |
setPreferredScrollableViewportSize(Dimension size) | Asigna el tamaño del viewport para esta tabla |
void |
setRowHeight(int newHeight) | Asigna la altura newHeight, en pixeles, de las filas |
void |
setRowHeight(int row, int newHeight) | Asigna la altura newHeight, en pixeles, de la fila row |
void |
setRowMargin(int newMargin) | Asigna la cantidad de espacio libre entre las filas |
void |
setRowSelectionAllowed(boolean flag) | Asigna si las filas de esta tabla pueden ser seleccionadas |
void |
setRowSelectionInterval(int index0, int index1) | Selecciona las filas desde index0, hasta index1, inclusive |
void |
setSelectionMackgrond(Color selectionBackground) | Asigna el color de fondo para las celdas seleccionadas |
void |
setSelectionForeground(Color selectionForeground) | Asigna el color de primer plano para las celdas seleccionadas |
void |
setSelectionMode(int selectionMode) | Asigna el modo de selección de tabla para permitir selección simple, un intervalo simple continuo ó intervalos múltiples |
void |
setSelectionModel(ListSelectionModel newModel) | Asigna el modelo de selección de filas newModel para esta tabla |
void |
setShowGrid(boolean b) | Asigna si se dibujan las líneas alrededor de las celdas |
void |
setShowHorizontalLines(boolean b) | Asigna si se dibujan líneas horizontales entre las celdas |
void |
setShowVerticalLines(boolean b) | Asigna si se dibujan líneas verticales entre las celdas |
void |
setTableHeader(JTableHeader newHeader) | Asigna el tableHeader que trabaja con esta tabla a
newHeader |
void |
setUI(TableUI ui) | Asigna el L&F que renderiza este componente |
void |
setValueAt(Object aValue, int row, int column) | Asigna el objeto aValue a la celda ubicada en row, column |
void |
setSizeColumnsToFit(boolean lastColumnOnly) | Obsoleto. reemplazado por sizeClumnsToFit(int) |
void |
setSizeColumnsToFit(int resizingColumn) | Cambia el tamaño de una o ás columnas en la tabla para que
la anchura total de todas las columnas de la JTable sea
igual a la anchura de la tabla |
void |
tableChanged(TableModelEvent e) | Invocado cuando el TableModel de la tabla genera un
TableModelEvent |
void |
unconfigureEnclosingScrollPane() | Anula los efectos de configureEnclosingScrollPane reemplazando
columnHeaderView del panel de desplazamiento por null |
void |
updateUI() | Llamado por UIManager cuando se cambia el L&F |
void |
valueChanged(ListSelectionEvent e) | Invocado cuando cambia la selección |
| Resumen de los Campos | ||
|---|---|---|
| Campo | Descripción | |
protected Vector |
columnIdentifiers | Un vector de identificadores de columna |
protected Vector |
dataVector | Un vector de valores Object |
| Resumen de los Constructores | |
|---|---|
| Constructor | Descripción |
DefaultTableModel() |
Construye un DefaultTableModel |
DefaultTableModel(int numRows, int numColumns) |
Construye un DefaultTableModel con numRows
y numColumns |
DefaultTableModel(Object[][] data, Object[] columnNames) |
Construye un DefaultTableModel e inicia la tabla pasando
data y columnNames al método setDataVector() |
DefaultTableModel(Object[] columnNames, int numRows) |
Construye un DefaultTableModel con un número de columnas equivalentes
al número de elementos o valores nulos en columnNames y numRows |
DefaultTableModel(Vector columnNames, int numRows) |
Construye un DefaultTableModel con un número de columnas equivalentes
al número de elementos o valores nulos en columnNames y numRows |
DefaultTableModel(Vector data, Vector columNames) |
Construye un DefaultTableModel e inicia la tabla pasando
data y columnNames al método setDataVector() |
| Resumen de los Métodos | ||
|---|---|---|
| Método | Descripción | |
void |
addColumnn(Object columnName) | Añade una columna al modelo |
void |
addColumnn(Object columnName, Object[] columnData) | Añade una columna al modelo |
void |
addColumnn(Object columnName, Vector columnData) | Añade una columna al modelo |
void |
addRow(Object[] rowData) | Añade una fila al final de modelo |
void |
addRow(Vector rowData) | Añade una fila al final de modelo |
public static Vector |
convertToVector(Object[] anArray) | Obtiene un Vector que contiene los mismos objetos que el array |
public static Vector |
convertToVector(Object[][] anArray) | Obtiene un Vector de vectores que contiene los mismos valores que la matriz anArray |
int |
getColumnCount() | Devuelve el número de columnas en esta tabla de datos |
String |
getColumnName(int column) | Añade una fila al final de modelo |
Vector |
getDataVector | Devuelve el Vector de Vectores que contiene los valores de datos de la tabla |
int |
getRowCount() | Devuelve el número de filas en esta tabla de datos |
Object |
getValueAt(int row, int column) | Devuelve un valor de atributo para la celda en la posición row, column |
void |
insertRow(int row, Object[][] rowData) | Inserta una fila en row en el modelo |
void |
insertRow(int row, Vector rowData) | Inserta una fila en row en el modelo |
boolean |
isCellEditable(int row, int column) | Devuelve true si la celda ubicada en row, column
se puede editar |
void |
moveRow(int startIndex, endIndex, int toIndex) | Muee una o más filas comenzando desde starIndex hasta endIndex
y las coloca en toIndex |
void |
newDataAvailable(TableModelEvent event) | Equivalente a fireTableChanged() |
void |
newRowsAdded(TableModelEvent event) | Este método permite asegurar que las nuevas filas tienen el número correcto de columnas |
void |
removeRow(int row) | Elimina del modelo la fila ubicada en row |
void |
rowsRemoved(TableModelEvent event) | Equivalente a fireTableChanged() |
void |
setColumnsIdentifiers(Object[] newIdentifiers) | Reemplaza los identificadores de columna del modelo |
void |
setColumnsIdentifiers(Vector newIdentifiers) | Reemplaza los identificadores de columna del modelo |
void |
setDataVector(Object[][] newData, Object[] columnNames) | Reemplaza el valor de la variable de instancia dataVector
por los valores de la matriz newData |
void |
setDataVector(Vector newData, Vector columnNames) | Reemplaza el valor de la variable de instancia dataVector
por los valores del Vector: newData |
void |
setNumRows(int newSize) | Asigna el número de filas del modelo.Obsoleto desde la v1.3 |
void |
setRowCount(int rowCount) | Fija el número de filas del modelo |
void |
setValueAt(Object aValue, int row, int column) | Asigna el valor del objeto para row y column |
| Resumen de los Campos | ||
|---|---|---|
| Campo | Descripción | |
protected EventListener |
ListenerList | La lista de todos los Listener |
| Constructores | |
|---|---|
| Constructor | Descripción |
| AbstractTableModel() | |
| Resumen de los Métodos | ||
|---|---|---|
| Método | Descripción | |
void |
addTableModelListener(TableModelListener l) | Agrega a un listener a la lista que se notifica cada vez que ocurre un cambio al modelo de los datos |
int |
findColumn(String columnName) | Retorna una columna dado su nombre |
void |
fireTableCellUpdated(int row, int column) | Notifica a todos los listeners que el valor de la celda[firstRow, lastRow], ha sido actualizado |
void |
fireTableChanged(TableModelEvent e) | Reenvia la notificacion del evento dado a todos los TableModelListeners que se registraron como listener para este modelo de tabla |
void |
fireTableDataChanged() | Notifica a todos los listeners que el valor de todas las celdas en la tabla, pueden haber cambiado |
void |
fireTableRowsDeleted(int firstRow, int lastRow) | Notifica a todos los listeners que las filas dentro del rango [firstRow, lastRow], inclusive, han sido eliminadas |
void |
fireTableRowsInserted(int firstRow, int lastRow) | Notifica a todos los listeners que las filas dentro del rango [firstRow, lastRow], inclusive, han sido insertadas |
void |
fireTableRowsUpdated(int firstRow, int lastRow) | Notifica a todos los listeners que las filas dentro del rango [firstRow, lastRow], inclusive, han sido actualizadas |
void |
fireTableStructuredChanged() | Notifica a todos los listeners que la estructura de la tabla a sido actualizada |
Class |
getColumnClass (int columnIndex) | Retorna un Object.class sin tomar en cuenta a columnIndex |
String |
getColumnName(int column) | Retorna un nombre predefinido para la columna usando el estilo de la hoja de cálculo: A, B, C,... |
EventListener [] |
getListeners(Class listenerType) | Devuelve un areglo con todos los listener del tipo dado en este modelo. |
boolean |
isCellEditable(int rowIndex, int columnIndex) | Retorna false; pero se puede sobreescribir y devolver true para que las celdas sean editables |
void |
removeTableModelListener(TableModelListener l) | Elimina un listener de la lista, esta se notifica cada vez que ocurre un cambio en el modelo de datos. |
void |
setValueAt(Object aValue, int rowIndex, int columnIndex) | Es un método vacío que no debe ser implementado si el modelo de datos no es editable |
tablas se convierte en una tarea sencilla
cuando comenzamos a conocer las clases auxiliares que la acompañan para mejorar su rendimiento
y eficiencia; la finalidad de este primer artículo es precisamente empezar a familializarte
con estas clases, en futuros artículos comenzaremos a tratar el manejo de eventos relacionados con las
tablas y la realización de tareas más complejas.
Swing TutorialTutorial de Swing en SUNLa Biblia de Java 2Puede descargar el codigo de los ejemplos: jtable.zip
|
Etiquetas: j2se
excelente, pero han omitido del como crear un JTable pero a partir de los resultados de un query(una consulta sql), me explico, que los resultados que me manda un select mostrarlos en un JTable .
excelente, pero han omitido del como crear un JTable pero a partir de los resultados de un query(una consulta sql), me explico, que los resultados que me manda un select mostrarlos en un JTable .
La página esta excelente pero ...en dónde puedo encontrar la segunda parte de este tema "JTable con Ejemplos parte II"
Quiero saber como llenar un JTable a partir de un cursor (consulta sql).
Gracias
estos codigos estan de lujo, ademas de la forma meticulosa de esplicar las cosas, buena por esa, pero deseo el zip de los archivos para poder ver el ultimo table.
fue interesante el documento, pero
si pudieces enviar el archivo .zip te lo agradeceria de todo corazon, haslo a alexeljach@latinmail.com
trate de descargarlo, pero me aparece un error de apache...
gracias.
Bien pero necesito algun tipo de ejemplo de jtable con eventos, como por ejemplo al cambiar un dato, como hacer para que al seleccionar y escribir cambie todos los datos y no concatene.
Agradezco de antemano a quien pueda ayudarme
flbcobra@hotmail.com
esta muy bien todo este docu quisiera saber como agregar filas y columnas al programa en ejecucion
les agradeceria su ayuda.
jimenez_e2j@yahoo.es
me parecio de primeras muy bueno y didacticos para cualquier nivel
les agradesco mucho por su ayuda
Excelente información todo muy bien documentado, gracias por tomarse el tiempo de escribirlo, pero lo malo es que no encuentro la segunda parte T_T de "JTable con Ejemplos parte II"
Muy buen documento,
Gracias
Si aplicamos un Renderer especial para la cela cómo sería la implementación en caso de que tenga valores booleanos en una coluna, lo que pasa es que yo implementé mi Modelo de tabla pero al momento de agregarle un Renderer a las celdas me borra el checkbox y me lo pone como String al final espero que me puedan ayudar gracias.
me resingo en todos los que inventaron el software libre el java y en especial el netbeans 6.0 y muy especialmente en los que inventaron el puto jtable
Muy bueno y entendible, mucha gracias me sirvio muchisimo
Styven Rutchell.... neo_rutchell@hotmail.com
Es excelente me parece una de las mejores ayudas recibidas en toda mi vida jaja no ya en serio es muy bueno se lo recomendare medio mundo Gracias
isrgp
hola que tal, como todos dicen esta muy bueno pero como el primer comentario seria seria bueno ver como hacerlo a partir de un obtenido de un query, aqui manejan los datos mediante arreglos, y podria meter el resultado de un query en un arreglo pero no creo que sea muy optimo que digamos ya que para querys muy pesados dejaria de ser funcional.
gracias... y si alguien conoce una pagina donde haga referencia a lo antes dicho se los agradeceria que me lo comentaran
bye :)
isrgp
hola que tal, como todos dicen esta muy bueno pero como el primer comentario seria seria bueno ver como hacerlo a partir de un ResultSet obtenido de un query, aqui manejan los datos mediante arreglos, y podria meter el resultado de un query en un arreglo pero no creo que sea muy optimo que digamos ya que para querys muy pesados dejaria de ser funcional.
gracias... y si alguien conoce una pagina donde haga referencia a lo antes dicho se los agradeceria que me lo comentaran
bye :)
ya no puedo descargar los manuales por fabor si me lo pobdrias mandar
mi correo es: maxijefe@live.com.mx
(1) ¿Dónde está la segunda parte?
(2) ¿Por que los comentarios no se pueden enviar desde el opera?, esta vez tuve que hacerlo desde el firefox.
Muy malo. Peor imposible.
tengo problemas para mostrar el resultado de una consulta (SQL), tengo un mentodo que devuelve el ResultSet, pero a la hora de mostrarlo en el Jtable, no lo permite.
Mi correo es: lvalerio@racsa.co.cr sin son tan amables de ayudarme.
Muchas gracias
Muy popular el sitio.. jeje..
Me quedé con las ganas de saber como agrego filas y columnas en tiempo de ejecución cuando implemento mi modelo.. está claro que con el defauldtable se puede, pero ke hay de cuando se crea el prpio modelo ¿?
Saludos.. y siempre agradecido por esto.. siempre hay alguien ke piensa en los demás... y en compartir su conocimiento...
muy buenas tardes muy valiosa informacion, actualmente estoy iniciandome en el mundo de el potente java pero estoy trancado un poco en generar un reporte de impresión, agradeceria cualquier infromacion si es un ejemplo mucho mejor conozco de lqa herramienta ireport y la jasper pero no he logrado entender como es eso gracias de antemano y disculpen mi ignorancia
De verdad esta muy bueno y completo el tutorial
me pregunto si hay alguna forma de no hacer tantos codigos
es decir arrastrar la tabla desde la paleta de componetes y luego hacer referencia por jemplo jtable1.clummnax = "juna ".....
y asi sucesivamente....
rafaelvtaveras@hotmail.com
Hola, quisiera saber como creo una tabla dinamica con valores aleatorios usando el JTable
felimon
creo que se olvidaron de los mas importante de como obtener un fila entera seleccionando con el mouse
perfecto pero me gustaria que inclulleran como cargar la tabla desde un boto por medio de un consulta a MySQL
hola, existe alguna manera de ejecutar varias ventanas con jtable osea varios jtable en dsitintas ventanas pero en un solo codigo, gracias
muy buen material
alguien sabe como puedo poner un editor en cada celda, osea que no sea el mismo editor para toda la columna, por ejemplo:
Propiedad Valor
nombre: se edita con un TextField
profesion: se edita con un ComboBox
Muy bueno, de todos los manuales que he leído este es el mejor, muy clara la información aunque lastima que no se vean las imágenes.
hola estoy interesado en aprender hacer que jtable se conecte a postgres 8.2 con solo arrastrar la tabla de la base de datos para que se configure el jtable automaticamen
att: luis cantin deseo
MUCHA AYUDA CON ESO GRACIA
hola como puedo dar el foco a una celda de un jtable y pueda editarlo...por favor ayuda
Saludos.
Les dejo un enlace, esta interesante, no pude correrlo como esta, así que lo modifique un poco agregando cadenas para login y password, también hay que modificar ModeloTablaResultados() agregando LOGIN y PASSWORD también
http://casidiablo.net/consultar-base-datos-java-mostrar-resultados-jtable/
de pelos
yayos_guitar
hola muy buena informacion me ha servido de mucho y ya entiendo su funcionamiento PERO QUISIERA SABER SI SE LES PUEDE ASIGNAR COLORES A LOS DATOS QUE ESTAN EN EL ARRAY BIDIMENCIONAL OSEA QUE A LOS DATOS DE CADA COLUMNA SE LES PUEDA PONER UN COLOR DIFERENTE lo e intentado pero me sale error . gracias hasta luego
muy bueno pero io quisiera saber como eliminar todo el contenido de una fila con tan solo ingresar el ruc de una persona(atributo)osea que al momento de ingresar el ruc y elimine toda los datos de la fila perteniciente a ese cliente gracias haber si me pueden ayudar estare muy agradecida
excelente, parece bastante directo el proceso, crear modelo, construir tabla, y trabajar sobre el modelo. gracias
hola soy un novato en java, y pues sacando info de aqui y de aya con mi amigo google, este realice una tarea para mi carrera de isc, aqui les pongo mi codigo espero y les sirva att: lui_deggial@hotmail.com
codigo creado en eclipse, plataforma linux fedora. openspurce, ayuda como te ayudaron.......
si lo pueden mejorar o no comprenden bien mi metodologia, hay me envian un mail .............
===========================Agenda.java=============================================
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
@SuppressWarnings("serial")
public class Agenda extends JFrame implements ActionListener{
private JButton bRegistrar,bLimpiar;
private JTextField tFNombre, tFApellidos;
private JTextArea tADireccion;
private JComboBox cGrado;
private JRadioButton rBFem,rBMas;
private ButtonGroup bG = new ButtonGroup();
private JCheckBox cBPasaporte, cBcartilla, cBActa ,cBCredencial ,cBCurp;
private GridBagConstraints pos;
private JPanel pVarios = new JPanel(new GridBagLayout());
private JPanel pTabla = new JPanel(new FlowLayout());
private JTable jTDatos;
private String []nombres = {"Nombre","Apellidos","Direccion","Grado","Genero","Documentacion"};
private Object[]info = new String[6];
private DefaultTableModel datos;
private String evento;
private int cont=0;
private TableColumn tc;
private JScrollPane jsp;
Agenda(){
//atributos de JFrame
super("Registro de informacion");
setLayout(new GridBagLayout());
//setLocationRelativeTo(null);
setResizable(false);
//añadiendo y posicionando componentes textField
pos = new GridBagConstraints();//inicializando la variable de posicion
pos.fill=GridBagConstraints.HORIZONTAL;//alineacion horizontal
tFNombre = new JTextField(20);//campo con 20 espacios
this.posicion(0 ,0);//cordenada de possicion x,y
pVarios.add(new JLabel("Nombre: "),pos); // agragando label anonimo
this.posicion(1 ,0);
pVarios.add(tFNombre,pos);//añadiendo el campo al contenedor panel y posicionandolo
tFApellidos = new JTextField(20);
this.posicion(0 ,1);
pos.insets=new Insets(10,0,0,0);//espacios entre componentes
pVarios.add(new JLabel("Apellidos: "),pos);
this.posicion(1 ,1);
pVarios.add(tFApellidos,pos);
//añadiendo y posicionando componentes textarea
tADireccion = new JTextArea(2,20);
this.posicion(0 ,2);
pVarios.add(new JLabel("Direccion: "),pos);
this.posicion(1 ,2);
pVarios.add(tADireccion,pos);
//añadiendo y posicionando el comboBox con 9 items
cGrado = new JComboBox();
for(int x = 0; x < 9 ;x++)
cGrado.addItem((x+1)+" sem");
this.posicion(0 ,4);
pVarios.add(new JLabel("Grado:"),pos);
this.posicion(1 ,4);
pVarios.add(cGrado,pos);
//añadiendo y posicionando componentes radioButtom
pos.insets=new Insets(20,0,0,0);
rBFem = new JRadioButton("Femenino");
rBMas = new JRadioButton("Masculino");
this.posicion(0 ,5);
pVarios.add(new JLabel("Genero:"),pos);
bG.add(rBFem);//agrupando radioButtom a ButtonGroup
bG.add(rBMas);//agrupando radioButtom a ButtonGroup
this.posicion(1 ,5);
pVarios.add(rBFem, pos);
pos.insets=new Insets(0,0,0,0);
this.posicion(1 ,6);
pVarios.add(rBMas, pos);
//añadiendo y posicionando componentes JCheckBox
cBPasaporte = new JCheckBox("Pasaporte");
cBcartilla = new JCheckBox("Cartilla Militar");
cBActa = new JCheckBox("Acta de Nacimineto");
cBCredencial = new JCheckBox("Credencial de Elector");
cBCurp = new JCheckBox("CURP");
pos.insets=new Insets(20,0,0,0);
this.posicion(0 ,8);
pVarios.add(new JLabel("Documentos:"),pos);
this.posicion(1 ,8);
pVarios.add(cBPasaporte,pos);
pos.insets=new Insets(0,0,0,0);
this.posicion(1 ,9);
pVarios.add(cBcartilla,pos);
this.posicion(1 ,10);
pVarios.add(cBActa,pos);
this.posicion(1 ,11);
pVarios.add(cBCredencial,pos);
this.posicion(1 ,12);
pVarios.add(cBCurp,pos);
//añadiendo y posicionando componentes JButton
bRegistrar = new JButton("Registrar");
bRegistrar.addActionListener(this);//eventos
bLimpiar = new JButton("Limpiar");
bLimpiar.addActionListener(this);
pos.fill=GridBagConstraints.CENTER; //alineacion centrada
pos.insets=new Insets(75,0,0,0);
this.posicion(0 ,27);
pVarios.add(bRegistrar,pos);
this.posicion(1 ,27);
pVarios.add(bLimpiar,pos);
//añadiendo y posicionando componentes JTable, edicion libre y columnas variantes
datos = new DefaultTableModel();//adaicion libre
for(int y=0; y< nombres.length; y++)
datos.addColumn(nombres[y]);//añadiendo titulo de columnas
jTDatos=new JTable(datos);//iniciando la tabla
jsp = new JScrollPane(jTDatos);//creando barras deslisadoras, horizontales y verticales
jTDatos.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);//lo requiere para ser valido el tamaño de columna
this.columna(nombres[0], 100);//metodo para establecer el tamaño de la columna
this.columna(nombres[1], 100);
this.columna(nombres[2], 200);
this.columna(nombres[3], 50);
this.columna(nombres[4], 70);
this.columna(nombres[5], 450);
this.posicion(3 ,0);
pTabla.add(jsp);
this.posicion(0 ,0);
add(pVarios);
this.posicion(1 ,0);
add(pTabla);
}
//metodo para establecer la posiscion
private void posicion(int x ,int y){
pos.gridx = x;
pos.gridy = y;
}
//metodo para establecer el tamaño de la columna
private void columna(String nom, int tam){
tc = jTDatos.getColumn(nom);
tc.setPreferredWidth(tam);
}
//metodo que maneja los eventos de los botones
public void actionPerformed(ActionEvent e){
evento= e.getActionCommand(); //resive el nombre del evente ejecutado
if (evento.equals("Registrar"))
this.Registrar();
else
if (evento.equals("Limpiar"))
this.limpiar(true);
}
//metodo para limpiar los componentes, con parametro boleano
private void limpiar(boolean todo){
//textField
tFNombre.setText(null);
tFApellidos.setText(null);
//texArea
tADireccion.setText(null);
//checkBox
cBPasaporte.setSelected(false);
cBcartilla.setSelected(false);
cBActa.setSelected(false);
cBCredencial.setSelected(false);
cBCurp.setSelected(false);
//Jtable
if(todo)//si es verdadero limpia la tabla
for(int i=0; i< cont; i++)
datos.removeRow(i);
}
//registra los datos introducidos por el usuario y los almacena en la JTable
private void Registrar(){
info[0] = tFNombre.getText();
info[1]= tFApellidos.getText();
info[2] = tADireccion.getText();
info[3] = cGrado.getSelectedItem();
if(rBFem.isSelected())
info[4] = "Femenino";
else if(rBMas.isSelected())
info[4] = "Masculino";
if(cBPasaporte.isSelected())
info[5] = "Pasaporte";
if(cBcartilla.isSelected())
info[5] = info[5] + "-Cartilla Militar";
if(cBActa.isSelected())
info[5] = info[5] + "-Acta de Nacimineto";
if(cBCredencial.isSelected())
info[5] = info[5] + "-Credencial de Elector";
if(cBCurp.isSelected())
info[5] = info[5] + "-CURP";
//añadiendo datos ala tabla
datos.insertRow(cont, info);
cont++;//incrementando una posicion ala tabla
this.limpiar(false);
}
}
============================PruebaAgenda.java========================================
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class PruebaAgenda extends JFrame{
public static void main(String[] args) throws Exception{
Agenda c = new Agenda();
c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
c.setSize(815,475);
c.setVisible(true);
}//main
}//clase
Muy buen articulo... Pero no sirve el enlace al ZIP y las imágenes no se muestran...
No hay segunda parte? interesante material gracias
esta exelente tu ejemplo muchas gracias, ahora si podes me decis como hago para hacerlo en una ventana??
te agradesco si me lo envias alvarodoune@hotmail.com
gracias
Excelente articulo felicidades al amigo que lo realizo
gracias por compartir eta informacion....es de gran ayuda
Excelente amigo gracias =D
Hola a todos, recurro a su espiritu colaborador y gran conoimiento para lo siguiente:
Estoy desarrollando un pequeño proyecto para la materia de Programacion Orientada a objetos, la cual vemos en Java, consiste en la gestion de reservas para un pequeño hotel o residencia, en el cual se tiene una clase que me muestra los menus de opciones, otra llamada Formulario_reserva la cual captura la informacion del cliente a registrar invocando a su vez a otra clase que gestiona la reserva: crea(), elimina() y consulta(), en la clase Formulario_reserva existe un boton de "consulta" el cual al ser presionado debe de ir a otra clase llamada habitaciones en la cual queremos mostrar la disponibilidad de habitaciones en el momento de la consulta, es decir, se tiene pensado dos tipos de habitaciones: simple y doble, aqui se debe visualizar las habitaciones libre y ocupadas por cada tipo, ademas al ser seleccionada una habitacion debe traer este dato a Formulario_reserva para guardar en un vector(de la Clase Vector de Java) junto con los demas datos del Formulario_reserva, y tambien actualizar la informcion para que en una segunda o tercer ingreso de un cliente nuevo, la habitacion anteriormente seleccionada aparezca ocupada, si una reserva es cancelada igualmente la habitacion ocupada debe aparecer como libre.
Espero ser claro en este requerimiento y agradezco inmensamente cualquier ayuda u orientacion que me puedan brindar ...
El proyecto se desarrolla tipo aplicacion de escritorio en java, lo estamos haciendo en JCreator y/o eclipse.
Agradezco inmensamente cualquier ayuda a: wilru25@hotmail.com
Wilmar
ola, esta pag esta d lo mejor,tiene muy buena info referente a lo q es el manejo con jTable.
kisiera saber donde puedo ubicar la parte 2 de este tema
gracias
**IsAbEliiTa **
Hola, realmente tambien creo que la pag es buenisima para los principiantes en java
en lo personal me gusto mucho porque como trabaja la jtable pero me quedo una duda enorme
yo quisiera saber como llenar la jtable con base de datos realmente es importante saberlo porq no
tengo ni idea de como se hace y me urge conocer como.......Alguien me puede ayudar?????
Porfis
Escribe tu comentario