1

When I add a column to a JTable. The table model is changed, but the table UI doesn't change. I called revalidate(), repaint(), updateUI(),... none worked.

This is part of the code:

public void insertColumn(int col, String columnName){
    this.columnIdentifiers.add(col, columnName);
    for (Object row: this.dataVector) {
        ((Vector) row).add(col, null);
    }
    fireTableStructureChanged();
}

model.insertColumn(col + 1, el);
Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
pilates
  • 33
  • 3

1 Answers1

0

Here's a snippet I use,

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

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

public class Main {
  public static void main(String[] argv) throws Exception {
    DefaultTableModel model = new DefaultTableModel();
    JTable table = new JTable(model);
    model.addColumn("Col1");
    model.addRow(new Object[] { "r1" });
    model.addRow(new Object[] { "r2" });
    model.addRow(new Object[] { "r3" });

    Vector data = model.getDataVector();
    Vector row = (Vector) data.elementAt(1);

    int mColIndex = 0;
    List colData = new ArrayList(table.getRowCount());
    for (int i = 0; i < table.getRowCount(); i++) {
      row = (Vector) data.elementAt(i);
      colData.add(row.get(mColIndex));
    }

    // Append a new column with copied data
    model.addColumn("Col3", colData.toArray());

    JFrame f = new JFrame();
    f.setSize(300, 300);
    f.add(new JScrollPane(table));
    f.setVisible(true);
  }
}
Uma Kanth
  • 5,659
  • 2
  • 20
  • 41