JTable: Borrar una columna

From ChuWiki
Jump to navigation Jump to search

En un JTable se puede borrar una columna de forma que no se vea. El borrado no afecta al modelo de datos -el DefaultTableModel o lo que tengamos- sino sólo a la visualización. Es decir, los datos de la columna siguen estando, pero no se ven.

Para borrrar la columna, pedimos el ColumnTableModel al JTable, a este le pedimos la columna concreta y luego la borramos. El código puede ser así

JTable tabla = new JTable(...);
...
TableColumnModel tcm = tabla.getColumnModel();

// Se pide la columna por su número, empezando en cero.
TableColumn columnaABorrar = tcm.getColumn(numeroColumna); 

tabla.removeColumn (columnaABorrar);

Un codigo de ejemplo completo puede ser el siguiente. Al pulsar el botón, se borra la columna de enmedio.

package chuidiang.ejemplos;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;

public class PruebaBorrarColumnaTabla {
	private static JTable t;

	public static void main(String [] args)
	{
		JFrame v = new JFrame();
		DefaultTableModel m = new DefaultTableModel();
		t = new JTable(m);
		JScrollPane s = new JScrollPane(t);
		m.addColumn("uno");
		m.addColumn("dos");
		m.addColumn("tres");
		Object [] fila = new Object[] {"a","b","c"};
		m.addRow(fila);
		v.getContentPane().add(s);
		
		JButton b = new JButton("borra");
		v.getContentPane().add(b,BorderLayout.NORTH);
		b.addActionListener(new ActionListener() {
		
			public void actionPerformed(ActionEvent e) {
				t.removeColumn(t.getColumnModel().getColumn(1));
			}
		
		});
		
		v.pack();
		v.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		v.setVisible(true);

	}
}