Grid layer
This is a top level layer used to divide up the table into grid regions. A layer or layer stack can then be assigned to each of these regions. This layer mostly serves to delegate functions to its lower layers.
see: diagram
Viewport Layer
Places a 'viewport' over the table. Introduces scroll bars over the table and keeps them in sync with the data being displayed.
Selection layer
Enables selection of rows, columns or cells on the table. Adds keyboard / mouse configuration used to trigger selection. Also hooks in the search and the tick update features. Uses the SelectionModel internally to track the selection state.
Column hide/show layer
Enables the hiding of columns. The layers underneath are not aware of hidden columns. When requests pass through this layer it manipulates them to return the columns positioned after the hidden columns.
Column reorder layer
Tracks the reordered columns. Similar to the column hide show layer, the other layers are unaware of column reordering.
Data layer
The primary purpose of the data layer is to attach the IDataProvider to the table and supply data for the cells. It also handles resize commands and tracks column/row sizes via SizeConfig objects. This layer always works with column/row indexes i.e the position of the cell in the underlying data source. It is usually the last layer in the stack.
Blink Layer
Enables the blink cell functionality i.e the cell blinks when the data in it is updated. This layer listens for the update events and caches them locally. During rendering it uses this cache to check if data in a cell has been updated.
GlazedListsEventLayer
This layer is meant to be used if the backing data source is a GlazedLists instance. Its acts as a listener for the List insert/delete/update events and fires corresponding NatTable events.
Hence, the table knows to repaint itself when the underlying data changes.