Share this page 

Hide a column in JTableTag(s): Swing


To hide one column (or more) in a JTable, don't give a column name. To get back the hidden data, you must use the TableModel.

[TableHideColumn.java]

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

import java.awt.event.*;
import java.awt.event.*;
import java.awt.*;

public class TableHideColumn
 implements ListSelectionListener {
  JTable tableView;
  public TableHideColumn() {
   JFrame frame = new JFrame("Table");
   frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {System.exit(0);}});

   // We specify only 2 column names, the last one is hidden
   final String[] names = {"First Name", "Last Name" };
   final Object[][] data = {
     {"Mark", "Andrews", new Integer(1)},
     {"Tom", "Ball", new Integer(2)},
     {"Alan", "Chung", new Integer(3)},
     };

   TableModel dataModel = new AbstractTableModel() {
     public int getColumnCount() { return names.length; }
     public int getRowCount() { return data.length;}
     public Object getValueAt(int row, int col) {
       return data[row][col];
     }
     public String getColumnName(int column) {return names[column];}
     public Class getColumnClass(int col) {
       return getValueAt(0,col).getClass();
     }
     public void setValueAt(Object aValue, int row, int column) {
       data[row][column] = aValue;
       }
     };

   tableView = new JTable(dataModel);

   ListSelectionModel listMod =  tableView.getSelectionModel();
   listMod.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
   listMod.addListSelectionListener(this);

   JScrollPane scrollpane = new JScrollPane(tableView);
   scrollpane.setPreferredSize(new Dimension(300, 300));
   frame.getContentPane().add(scrollpane);
   frame.pack();
   frame.setVisible(true);
   }

 public void valueChanged(ListSelectionEvent e) {
   int maxRows;
   int[] selRows;
   Object value;

   if (!e.getValueIsAdjusting()) {
     selRows = tableView.getSelectedRows();

     if (selRows.length > 0) {
        for (int i= 0; i < 3 ; i++) {
          // get Table data
          TableModel tm = tableView.getModel();
          value = tm.getValueAt(selRows[0],i);
          System.out.print(value + " " );
          }
        System.out.println();
        }
     }
    }

    public static void main(String[] args) {
        new TableHideColumn();
    }
}

This technique is not the best one since a exception is generated when Swing tries to display an "hidden column".

For a better way check out these links :

http://www.codeguru.com/java/articles/660.shtml
http://www.experts-exchange.com/Programming/Programming_Languages/Java/Q_20394392.html