JTable de numero de filas variable

Fran
30 de Octubre del 2003
Tengo un modelo de tabla propio y en el tengo:

class MyTableModel extends AbstractTableModel {

final String[] columnNames = {"Colummna1",
"Colummna2",
"Colummna3",
"Colummna4",
"Colummna5"};
Color c=new Color(255, 255, 255);
final Object[][] data = {
{c,c,c,c,c},{c,c,c,c,c},{c,c,c,c,c},
{c,c,c,c,c},{c,c,c,c,c},{c,c,c,c,c},
{c,c,c,c,c},{c,c,c,c,c},{c,c,c,c,c},
{c,c,c,c,c},{c,c,c,c,c},{c,c,c,c,c},
{c,c,c,c,c},{c,c,c,c,c}
};

En las celdas almaceno colores, pero bueno creo que eso no importa para mi duda. Yo no se a priori cuantas filas va a tener mi tabla y si lo hago así me crea 5 filas o las que yo quiera. Mi problema es como añadir nuevas filas dinámicamente. ¿Alguien sabe como se puede hacer?
Muchas gracias,

Marcelo
30 de Octubre del 2003
Para agregar filas en forma dinámica, convendría que tu clase extienda DefaultTableModel, en lugar de AbstractTableModel, debido a que la primera viene con métodos para agregar filas y columnas dinámicamente. Te paso este código:


package javaCode.swing.masTablas;

import java.awt.BorderLayout;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;

import javaCode.util.*;

public class FuncionamientoBasico extends javax.swing.JFrame {

JTable table;
DefaultTableModel tableModel;

/** Creates a new instance of FuncionamientoBasico */
public FuncionamientoBasico() {
Object[][] data =
{
{"Gonzales", "Roberto", "56"},
{"Perez", "Juan", "40"},
{null, null, null}
};

Object[] columns = {"Apellido", "Nombre", "Edad"};

tableModel = new DefaultTableModel(data, columns);
tableModel.addTableModelListener( new FuncionamientoBasico.TableListener() );
table = new JTable(tableModel);

this.getContentPane().add( table, BorderLayout.CENTER );
this.setBounds(50, 50, 250, 250);
this.setVisible( true );

}

class TableListener implements TableModelListener{

Object[] ra = {null, null, null};

public void tableChanged( TableModelEvent e ){
System.out.println("entro al listener");
ListSelectionModel lsm = FuncionamientoBasico.this.table.getSelectionModel();

System.out.println("fila seleccionada: " + lsm.getMinSelectionIndex());
System.out.println("filas en la tabla: " + FuncionamientoBasico.this.table.getRowCount());

if( lsm.getMinSelectionIndex() == FuncionamientoBasico.this.table.getRowCount()-1 ){
((DefaultTableModel)FuncionamientoBasico.this.table.getModel()).addRow( ra );
}
}
}

public static void main( String[] args ){
FuncionamientoBasico fb = new FuncionamientoBasico();
}

}

Mario Antonio Ruiz Carrillo
01 de Diciembre del 2014
hola, me gustaría saber si tienes un ejemplo para agregar columnas de manera dinámica con sus nombres de encabezados, gracias de antemano