ads

sábado, 24 de janeiro de 2009

Código para excluir uma coluna de uma JTable em tempo de execução

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
import java.util.*;


public class Estudos extends JFrame{
public Estudos(){
super("Exemplo de uma tabela simples");

final DefaultTableModel modelo = new MyDefaultTableModel();

// constrói a tabela
final JTable tabela = new JTable(modelo);
tabela.setAutoCreateColumnsFromModel(false);

// Cria duas colunas
modelo.addColumn("Nome");
modelo.addColumn("Idade");

JButton btn = new JButton("Inserir Colunas");
btn.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
String titulo = JOptionPane.showInputDialog(null,
"Informe o título para a nova coluna:");
int pos = Integer.parseInt(JOptionPane.showInputDialog(null,
"Informe a posição da nova coluna:"));

// testa se a posição é válida
if(pos > (modelo.getColumnCount() - 1))
pos = 0;

// Insere uma coluna na posição especificada
insertColumn(tabela, titulo, null, pos);
}
}
);

JButton btn2 = new JButton("Excluir Colunas");
btn2.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
int pos = Integer.parseInt(JOptionPane.showInputDialog(null,
"Informe a posição da coluna a ser excluída:"));

// testa se a posição é válida
if(pos < modelo.getColumnCount())
// remove a coluna na posição especificada
removeColumnAndData(tabela, pos);
}
}
);

tabela.setPreferredScrollableViewportSize(new Dimension(350, 50));

Container c = getContentPane();
c.setLayout(new FlowLayout());

JScrollPane scrollPane = new JScrollPane(tabela);
c.add(scrollPane);
c.add(btn);
c.add(btn2);

setSize(400, 300);
setVisible(true);
}

public void betterAddColumn(JTable table, Object headerLabel,
Object[] values) {
DefaultTableModel model = (DefaultTableModel)table.getModel();
TableColumn col = new TableColumn(model.getColumnCount());

if(table.getAutoCreateColumnsFromModel()) {
throw new IllegalStateException();
}
col.setHeaderValue(headerLabel);
table.addColumn(col);
model.addColumn(headerLabel.toString(), values);
}

public void insertColumn(JTable table, Object headerLabel,
Object[] values, int vColIndex){
betterAddColumn(table, headerLabel, values);
table.moveColumn(table.getColumnCount()-1, vColIndex);
}

public void removeColumnAndData(JTable table, int vColIndex) {
MyDefaultTableModel model = (MyDefaultTableModel)table.getModel();
TableColumn col = table.getColumnModel().getColumn(vColIndex);
int columnModelIndex = col.getModelIndex();
Vector data = model.getDataVector();
Vector colIds = model.getColumnIdentifiers();

table.removeColumn(col);

colIds.removeElementAt(columnModelIndex);

for (int r=0; rVector row = (Vector)data.get(r);
row.removeElementAt(columnModelIndex);
}
model.setDataVector(data, colIds);

Enumeration enume = table.getColumnModel().getColumns();
for (; enume.hasMoreElements(); ) {
TableColumn c = (TableColumn)enume.nextElement();
if (c.getModelIndex() >= columnModelIndex) {
c.setModelIndex(c.getModelIndex()-1);
}
}
model.fireTableStructureChanged();
}

public static void main(String args[]){
Estudos app = new Estudos();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class MyDefaultTableModel extends DefaultTableModel {
public Vector getColumnIdentifiers() {
return columnIdentifiers;
}
}

Nenhum comentário: