I'm using Nattable for a couple of different tables in my application. Now I need to find a way to remove the row numbers in the first column. Is there some way to hide/remove the row numbers from the table?
My source to draw the table is:
public void generate() {
ConfigRegistry configRegistry = new ConfigRegistry();
ColumnGroupModel columnGroupModel = new ColumnGroupModel();
ColumnGroupModel columnGroupGroup = new ColumnGroupModel();
bodyLayer = new BodyLayerStack<T>(this.expandTree, getItems(), columnPropertyAccessor, configRegistry,
treeformat);
columnLabelAccumulator = new CustomLabelAccumulator(bodyLayer.getBodyDataLayer(),
(ListDataProvider<T>) bodyLayer.getBodyDataProvider());
applyColumnLabels(columnDefinitions, columnLabelAccumulator);
bodyLayer.getBodyDataLayer().setConfigLabelAccumulator(columnLabelAccumulator);
// create the column header layer stack
IDataProvider columnHeaderDataProvider = new NATColumnHeaderDataProvider(columnDefinitions);
DataLayer columnHeaderDataLayer = new DataLayer(columnHeaderDataProvider);
ColumnHeaderLayer columnHeaderLayer = new ColumnHeaderLayer(columnHeaderDataLayer, bodyLayer,
bodyLayer.getSelectionLayer());
ILayer columnHeaderToUse = null;
if (sortEnabled) {
SortHeaderLayer<T> sortHeaderLayer = new SortHeaderLayer<T>(columnHeaderLayer, new GlazedListsSortModel<T>(
bodyLayer.getSortedList(), columnPropertyAccessor, configRegistry, columnHeaderDataLayer));
columnGroupHeaderLayer = new ColumnGroupHeaderLayer(sortHeaderLayer, bodyLayer.getSelectionLayer(),
columnGroupModel);
columnHeaderToUse = sortHeaderLayer;
} else {
columnGroupHeaderLayer = new ColumnGroupHeaderLayer(columnHeaderLayer, bodyLayer.getSelectionLayer(),
columnGroupModel);
columnHeaderToUse = columnGroupHeaderLayer;
}
columnGroupGroupHeaderLayer = new ColumnGroupGroupHeaderLayer(columnGroupHeaderLayer,
bodyLayer.getSelectionLayer(), columnGroupGroup);
applyColumnWidths(bodyLayer.getBodyDataLayer());
applyColumnHeaderGroups();
// Note: The column header layer is wrapped in a filter row composite.
// This plugs in the filter row functionality
DefaultGlazedListsStaticFilterStrategy<T> filterStrategy = new DefaultGlazedListsStaticFilterStrategy<T>(
bodyLayer.getFilterList(), columnPropertyAccessor, configRegistry);
for (int i = 0; i < staticFilters.size(); i++) {
filterStrategy.addStaticFilter(staticFilters.get(i));
}
if (showHeaderGroupRow) {
columnHeaderToUse = columnGroupHeaderLayer;
if (showHeaderGroupGroupsRow)
columnHeaderToUse = columnGroupGroupHeaderLayer;
}
FilterRowHeaderComposite<T> filterRowHeaderLayer = new FilterRowHeaderComposite<T>(filterStrategy,
columnHeaderToUse, columnHeaderDataLayer.getDataProvider(), configRegistry);
ILayer finalHeaderRow = columnHeaderToUse;
if (showFilterRow) {
finalHeaderRow = filterRowHeaderLayer;
}
// build the row header layer
DefaultRowHeaderDataProvider rowHeaderDataProvider = new DefaultRowHeaderDataProvider(
bodyLayer.getBodyDataProvider());
DataLayer rowHeaderDataLayer = new DataLayer(rowHeaderDataProvider);
rowHeaderDataLayer.setDefaultColumnWidth(40);
ILayer rowHeaderLayer = new RowHeaderLayer(rowHeaderDataLayer, bodyLayer, bodyLayer.getSelectionLayer());
// build the corner layer
ILayer cornerLayer = new CornerLayer(
new DataLayer(new DefaultCornerDataProvider(columnHeaderDataProvider, rowHeaderDataProvider)),
rowHeaderLayer, finalHeaderRow);
// build the grid layer
compositeGridLayer = new GridLayer(bodyLayer, finalHeaderRow, rowHeaderLayer, cornerLayer);
if (editorConfiguration != null) {
compositeGridLayer.addConfiguration(editorConfiguration);
}
natTable = new NatTable(parent, compositeGridLayer, false);
natTable.setConfigRegistry(configRegistry);
natTable.addConfiguration(new DefaultNatTableStyleConfiguration());
compositeGridLayer.registerCommandHandler(new LandscapePrintHandler(compositeGridLayer));
addStyling();
natTable.addLayerListener(new ILayerListener() {
@Override
public void handleLayerEvent(ILayerEvent event) {
int rowNumber = -1;
int columnNumber = -1;
if (event instanceof CellVisualChangeEvent && !(event instanceof CellSelectionEvent)) {
CellVisualChangeEvent visualChangeEvent = (CellVisualChangeEvent) event;
rowNumber = visualChangeEvent.getRowPosition();
columnNumber = visualChangeEvent.getColumnPosition();
ListDataProvider<T> dataProvider = (ListDataProvider<T>) bodyLayer.getBodyDataProvider();
int transformedRow = LayerUtil.convertRowPosition(compositeGridLayer, selectedRow,
bodyLayer.getBodyDataLayer());
T newObject = dataProvider.getRowObject(transformedRow);
notifyModificationListeners(newObject, getSelectedItem());
}
if (event instanceof CellSelectionEvent) {
CellSelectionEvent cellEvent = (CellSelectionEvent) event;
rowNumber = cellEvent.getRowPosition();
columnNumber = cellEvent.getColumnPosition();
launchGridSelectionUpdated();
}
if (rowNumber > -1) {
ListDataProvider<T> dataProvider = (ListDataProvider<T>) bodyLayer.getBodyDataProvider();
int transformedRow = LayerUtil.convertRowPosition(compositeGridLayer, rowNumber,
bodyLayer.getBodyDataLayer());
T ob = dataProvider.getRowObject(transformedRow);
notifyItemSelectionlisteners(ob);
}
if (columnNumber > -1) {
int transformedColumn = LayerUtil.convertColumnPosition(compositeGridLayer, columnNumber,
bodyLayer.getBodyDataLayer());
selectedColumnPlaceholder.clear();
selectedColumnPlaceholder.add(columnDefinitions.get(transformedColumn));
}
if (rowNumber != -1 && columnNumber != -1) {
// First start of the selection process
ListDataProvider<T> dataProvider = (ListDataProvider<T>) bodyLayer.getBodyDataProvider();
int transformedRow = LayerUtil.convertRowPosition(compositeGridLayer, rowNumber,
bodyLayer.getBodyDataLayer());
setSelectedItem((T) Utils.cloneObject(dataProvider.getRowObject(transformedRow)));
selectedRow = rowNumber;
}
}
});
// add sorting configuration
natTable.addConfiguration(new SingleClickSortConfiguration());
natTable.configure();
// natTable.setTheme(new ModernNatTableThemeConfiguration());
ThemeConfiguration modernTheme = new ModernNatTableThemeConfiguration();
modernTheme.addThemeExtension(new CustomGroupByThemeExtension());
natTable.setTheme(modernTheme);
freezeColumns();
registerCopyHandlers(getSelectionLayer(), columnHeaderDataLayer);
natTable.addMouseListener(new MouseAdapter() {
@Override
public void mouseDown(MouseEvent e) {
if (e.button == MouseEventMatcher.RIGHT_BUTTON) {
int column = compositeGridLayer.getColumnPositionByX(e.x);
int row = bodyLayer.getBodyDataLayer().getRowPositionByY(e.y);
row = compositeGridLayer.getRowPositionByY(e.y);
ListDataProvider<T> dataProvider = bodyLayer.getBodyDataProvider();
int transformedRow = LayerUtil.convertRowPosition(compositeGridLayer, row,
bodyLayer.getBodyDataLayer());
if (transformedRow != -1) {
T item = dataProvider.getRowObject(transformedRow);
notifyRightClickListeners(e.x, e.y, item, getColumnDefinition(column));
}
}
}
});
attachToolTip();
}
If you don't want the row numbers in the row header, don't use a GridLayer
. You can also use a CompositeLayer
and only have a column header and a body.
There are several examples in the NatTable examples application that show this.