JTable de numero de filas variable
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,
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,
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();
}
}
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();
}
}
hola, me gustaría saber si tienes un ejemplo para agregar columnas de manera dinámica con sus nombres de encabezados, gracias de antemano
