public class MyTable extends JXTable {
public static final int DEFAULT_ROW_HEIGHT = 18;
private Map hiddenColumns;
public MyTable(TableModel dm) {
super(dm);
initComponents(); // this does some work a calls inside initFilters() method
hiddenColumns = new HashMap();
}
public void hideColumn(String columnName) {
int index;
try {
index = getColumnModel().getColumnIndex(columnName);
}
catch (IllegalArgumentException exp) {
//column is not present - can be already hidden
return;
}
TableColumn columnToHide = getColumnModel().getColumn(index);
hiddenColumns.put(columnName, columnToHide);
hiddenColumns.put(":" + columnName, new Integer(index));
getColumnModel().removeColumn(columnToHide);
}
public void showColumn(String columnName) {
Object o = hiddenColumns.remove(columnName);
if (o == null) {
return;
}
getColumnModel().addColumn((TableColumn) o);
o = hiddenColumns.remove(":" + columnName);
if (o == null) {
return;
}
int column = ((Integer) o).intValue();
int lastColumn = getColumnModel().getColumnCount() - 1;
if (column < lastColumn) {
getColumnModel().moveColumn(lastColumn, column);
}
}
private void initFilters() {
TableFilterHeader filterHeader = new TableFilterHeader(this);
IFilterEditor filter;
for (TableColumn col : TableColumn.values()){
filter = filterHeader.getFilterEditor(col.ordinal());
if (col.isFiltered()==1)
filter.setAutoChoices(AutoChoices.ENABLED);
else filter.setUserInteractionEnabled(false);
}
}