Citra Technologies

Citra Table change log

14/3/2018 - version 4.18

-Improved performance of re-selection of cells during data update and search.

9/2/2018 - version 4.17


-Fixed a bug with AdvancedJScrollPane not keeping frozen rows and columns when the model changes in some cases.
-ListRowHeader used by AdvancedJTable now uses a fixed cell height equal to the table's row height, and is changed to non-fixed when the table has a variable row height. The performance of ListRowHeader is far greater in the first case.
-Improved TableAssistant's performance for table models that have a lot of columns.
-Ensured that TableReorder does not select columns that do not exist after a reorder event.

20/12/2017 - version 4.16


-Added option in TableReorder for restoring row selections in a batch, which improves performance.

21/11/2017 - version 4.15


-Reverted some changes made in version 4.9.3 regarding FilterHeaderModel's internal behaviour where the installFilter methods had been effectively replaced by installFilterToModel ones. Now installFilter is first called that delegates to installFilterToModel. For custom behaviour, although it is preferrable to override the 'catch-all' installFilterToModel method that performs filtering on non-visible columns also, developers may choose to override installFilter if they only care about visible columns.

13/11/2017 - version 4.14


-Made some adjustments so that the library works under the new java 9.

7/6/2017 - version 4.13


-Fixed some issues with FilterTableModel not updating itself correctly when a TableDataChanged event is issued and allowFilter is false.

2/6/2017 - version 4.12


-Fixed a bug with FilterTableModel not showing new row additions when a TableDataChanged event is issued and allowFilter is false.

25/5/2017 - version 4.11


-Fixed a bug with SortTableModel throwing an IndexOutOfBounds exception when a new set of rows is assigned and FilterTableModel is not present.
-FilterTableModel now does not show all rows when the underlying model fires a TableDataChanged event and allowFilter is false.
-Fixed a bug with incremental sorting.

12/5/2017 - version 4.10


-Added FreezableScrollPane for defining a freezable area for any JComponent being viewed from the scrollpane.
-The size of PopupFilterHeaderModel's filter popup menu is now adjusted to the preferred size of the contents of its values.
-Added ability in PopupFilterHeaderModel to assign user defined filter items that are hooked to specific TableFilter actions.

10/5/2017 - version 4.9.3


-Changed FilterHeaderModel's internal behaviour.
-The filter for blank values can now be specified globally for FilterHeaderModel.

4/5/2017 - version 4.9.2


-Filter for blank values now accepts objects whose toString() method is empty.

4/5/2017 - version 4.9.1


-The column dialog now appears with respect to the popup menu's location. There is also the ability to change the default position, by overriding the TableAssistant#getColumnDialogPosition method.
-Supresses an IllegalComponentStateException from being thrown from within the TreeTable.

10/4/2017 - version 4.9


-Introduced LockedJTextField, an editor suitable for locked rows and columns.
-AdvancedJTable now assigns suitable editors for locked rows and columns, by default.
-TreeTable no longer needs its own StyleModel (DefaultTreeStyleModel), the style is applied internally from within the table.

5/4/2017 - version 4.8.6


-Fixed some mouse issues with editors under locked columns.

20/3/2017 - version 4.8.5


-Added a vertical line before the filter icon in DefaultFilterRenderer, in inline mode.

14/3/2017 - version 4.8.4


-The background selection color of ListRowHeader can now be changed.

9/3/2017 - version 4.8.3


-Fixed a bug with DefaultSortTreeTableModel throwing an exception when the structure of a node changes.

3/3/2017 - version 4.8.2


-Fixed a bug with DefaultSortTreeTableModel throwing an exception when the root node changes.

1/3/2017 - version 4.8.1


-Fixed a bug with ListRowHeader not adding mouse handlers.

22/2/2017 - version 4.8


-Fixed a bug with AdvancedJTable not giving the focus to a jcombox editor while editing.

14/2/2017 - version 4.7


-Added option in ListRowHeader to extend table column selection to all columns when a row is selected in the list.
-SortTableModel now notifies SorterListeners whenever the sort states change, sorting is about to start or has ended.

27/1/2017 - version 4.6


-ListRowHeader is now synchronized with the table, highlighting rows that are selected.

20/1/2017 - version 4.5


-Further optimized sorting and filtering.

22/12/2016 - version 4.4


-Fixed a painting issue when moving a grouped column that cannot be moved.
-Optimized performance of sorting and filtering for very large number of rows.

6/12/2016 - version 4.3


-Fixed a bug with FilterHeaderModel not applying custom filters correctly.
-DefaultFilterTreeRenderer can now use JTableHeader's default renderer for drawing the filter arrow.
-Fixed some scrolling issues with AdvancedJScrollPane.
-DefaultListRowHeaderRenderer can now use the TableCellRenderer of a JTableHeader for cell painting.
-Fixed some issues with TableCellResizer.

2/12/2016 - version 4.2.9


-Fixed a bug with AdvancedJScrollPane having trouble scrolling to the last column when left columns are set.
-Added ability in SortTableDefaultRenderer to change the sort icons and customize their painting position.

1/12/2016 - version 4.2.8


-Added SortTableDefaultRenderer, a SortTableRenderer implementation that uses JTableHeader's default renderer for drawing the sorting columns.
-DefaultFilterRenderer can now use JTableHeader's default renderer for drawing the filter arrow.
-Fixed a number of bugs when dragging group columns and locked columns are used.

21/11/2016 - version 4.2.6


-Fixed a bug with FilterHeaderModel not applying filters correctly in some cases.
-AdvancedJTable now never scrolls to the last dummy column.

18/11/2016 - version 4.2.5


-"Custom" option is now available for "free selections" in PopupFilterHeaderModel.
-AdvancedJScrollPane now paints faster when locked columns/rows are in place.
-Fixed some painting bugs with AdvancedJScrollPane when used with locked columns/rows.
-Prevented IllegalComponentStateException from being thrown from within the GUI classes.
-Fixed a bug in AdvancedJTable with the mouse behaving erratically when dragging cells and locked columns are present.
-Fixed some scrolling issues with TableReorder and subclasses.
-Fixed a bug with DefaultSortTreeTableModel throwing an exception when a row is being shown, after it has been updated while hidden.

11/8/2016 - version 4.2.4


-Added option in PopupFilterHeaderModel for selecting any filter value in the popup menu for multiple selections.

13/7/2016 - version 4.2.3


-Added methods in SortTableModel and FilterTableModel for controlling whether incremental sorting and filtering will be used.

8/7/2016 - version 4.2.2


-Optimized SortTableModel with incremental sorting.

27/6/2016 - version 4.2.1


-Optimized FilterTableModel by implementing incremental filtering, where appropriate.

27/5/2016 - version 4.2


-Optimized PopupFilterHeaderModel for a large number of filter data.
-Painting of the remaining space in the viewport, according to its color.

21/2/2016 - version 4.1.59


-Added option in TableAssistant to not resize columns if their width is already zero.
-Fixed a bug with TableCellResizer not resetting the cursor when the mouse leaves the table.
-ViewableResizer optimizations.
-Better handling of column additions in TreeColumnNodeMask.
-Added methods for showing/hiding a column in TreeTableHeader, by setting their width to zero.

2/2/2016 - version 4.1.58


-Improved resetColumns method of TableAssistant, so that it takes into account group columns as well.

13/1/2016 - version 4.1.57


-Mouse event absolute coordinates are now not changed during translations due to locked rows/columns.

4/1/2016 - version 4.1.56


-Fixed a bug with TableComboBoxEditor not displaying the popup in the correct position when locked rows/columns are in place.
-Optimized AdvancedJScrollPane's painting routines.
-Added method resetColumns to TableAssistant to synchronize the columns of the column model with the selection popup and dialog.

16/6/2015 - version 4.1.55


-Optimized painting behaviour of AdvancedJScrollPane, when locked rows/columns are in use.
-Optimized drawing of spanned cells.

20/3/2015 - version 4.1.54


-Fixed a bug with PopupFilterHeaderModel not running properly under java 1.4.
-Fixed a bug with TableAssistant clearing all columns from the column popup, when the same table model is assigned twice.

10/3/2015 - version 4.1.53


-Fixed a bug with PopupFilterHeaderModel not releasing the filter button after a custom filter is selected.

3/3/2015 - version 4.1.52


-Fixed a bug with PopupFilterHeaderModel not correctly capturing mouse events on the filter popup, in some jvms.

10/1/2015 - version 4.1.51


-Fixed a bug with ColumnFilterHeaderModel not showing the filter control under some columns.

9/1/2015 - version 4.1.50


-Added method in PopupFilterHeaderModel to control the minimum width of the filter popup menu.
-Added controls in PagingPanel to change the page size and current page number.

18/12/2014 - version 4.1.49


-Added an implementation for page navigation inside a table.

3/11/2014 - version 4.1.48


-Fixed a bug with the table not being painted properly after a sort event and when row heights are changed.

3/10/2014 - version 4.1.47


-Improved performance of PopupFilterHeaderModel when a filter popup opens, containing a large number of entries.

29/9/2014 - version 4.1.46


-TableAssistant now keeps the 'show children' property of group columns when these are hidden from the view.

31/7/2014 - version 4.1.45


-Fixed an issue with AdvancedJScrollPane not scrolling to the correct cell when locked columns are in place and a new row has been added.

30/7/2014 - version 4.1.43


-Fixed sorting with the keyboard for grouped columns.

1/7/2014 - version 4.1.42


-Fixed an issue with AdvancedJScrollPane not scrolling to the correct cell when locked columns are in place.

4/6/2014 - version 4.1.41


-SortTableModel can now be sorted using the space key, when a column is in focus. Having the ctrl key also pressed, adds a sorting column, whereas holding the shift down, releases it from sorting.

2/6/2014 - version 4.1.40


-PopupFilterHeaderModel now shows columns that are in focus.
-The filter popup menu of PopupFilterHeaderModel is now displayed when the down arrow key is pressed inside a focused column, and can be navigated with the left and right arrow keys.
-Optimized painting of moving grouped columns.
-SortTableRenderer now shows focused columns.

27/5/2014 - version 4.1.39


-The filter popup menu of PopupFilterHeaderModel can now be navigated with the arrow keys.
-Fixed an issue where the popup menu of PopupFilterHeaderModel was wrongly assigned as the first focusable component of an AdvancedJTable.
-CheckComboBox's items can now be selected with the 'space' key.
-AdvancedTableHeader can now show which columns are in focus.

23/5/2014 - version 4.1.38


-Fixed an issue where some components were not updated properly after the UI had changed.
-Added method shouldShowFilter to PopupTreeFilterHeaderModel for determining when a filter indicator should be shown on the column header.

21/5/2014 - version 4.1.37


-PopupTreeFilterHeaderModel now uses a single instance of a FilterTreeRenderer to paint the filterable header component.
-GroupTableHeader now uses a row index of -1 for its header component, when a column is not grouped.

13/5/2014 - version 4.1.36


-Fixed a bug with the combobox editor not being cleared properly when using spanned cells.
-DefaultSortTreeTableModel now clears affected cells only, after a tree structure change event.

12/5/2014 - version 4.1.35


-Fixed a bug with TableAssistant not being cleared properly after the structure of the table has been changed.
-Fixed a bug with DefaultSortTreeTableModel not refreshing its indices after its structure has changed.
-Added method to SortTableModel (#setReturnToStringComparator) for determining whether a Comparator that compares strings is returned for objects that do not implement the comparable interface.
-Made the popup menu of a cell's combobox editor to be displayed after a different cell in the same column is being edited.

8/5/2014 - version 4.1.34


-Improved painting for TableComboBoxEditor.
-Added GenericEditor for validating edited cell values before committing them.
-Added method setDefaultEditors to AdvancedJScrollPane that assigns editors for use with locked columns.

7/5/2014 - version 4.1.33


-Fixed a painting issue when a JCombobox is used as an editor, in combination with locked columns.

1/5/2014 - version 4.1.32


-Fixed an issue with JCombobox editor stopping editing, when the editing column is inside a locked column.

24/4/2014 - version 4.1.31


-Fixed some painting issues with TreeTable.
-Fixed a bug with TableAssistant displaying duplicate columns when the table's data model is reassigned.

25/3/2014 - version 4.1.30


-AdvancedTableHeader now clears columns of any listeners, when its table is set to null.

11/3/2014 - version 4.1.29


-Fixed a bug in TableAssistant not showing group columns after these had been hidden.

6/3/2014 - version 4.1.28


-Added method in TableAssistant for checking whether a column is hidden from the view or it does not exist at all in the table model.

17/2/2014 - version 4.1.27


-The filter popup menu is now reduced in size, when a column's width is very large.
-The filter popup menu now displays properly for non-frozen columns.
-Added option to DefaultFilterTreeTableModel to assign the maximum number of entries that the model can present as its filter values.

14/2/2014 - version 4.1.26


-Fixed a bug with DynamicTreeTableModel erroneously creating an ungrouped row when a comparator's setAlwaysCreategroup variable is set to false.

7/2/2014 - version 4.1.25


-Fixed a bug with TableAssistant not creating the column popup menu properly after a column has been removed or added, and there were deselected columns in the model.

5/1/2014 - version 4.1.24


-Fixed a bug with a null pointer exception being thrown from PopupFilterHeaderModel in some extreme cases.

9/12/2013 - version 4.1.23


-Fixed a bug with converting filters between different library versions.

27/11/2013 - version 4.1.21


-SortTableModel and FilterTableModel now return an iterable list of rows.

16/9/2013 - version 4.1.19


-Changed GroupingPanel and NodeGroupingPanel so that developer can define the columns and order that grouping is provided.

29/8/2013 - version 4.1.17


-DefaultSortTreeTableModel can now accept user's SortTableModel for custom node sorting.

21/8/2013 - version 4.1.16


-SortTableModel can now be set whether to sort null values in a general way or delegate null-value sorting to the comparators.

12/7/2013 - version 4.1.15


-Fixed a bug with SortTableModel and FilterTableModel, when searching their list of objects.

1/7/2013 - version 4.1.14


-Changed the way dragged group columns are painted.
-Fixed a bug with the column chooser dialog, when selecting multiple columns holding the CTRL key.

13/6/2013 - version 4.1.13


-Fixed a bug with DynamicTreeTableModel not creating nodes properly when a custom comparator is used.

22/5/2013 - version 4.1.12


-Added a property change listener to the view of an AdvancedJScrollPane that gets notified every time a bound property changes.

20/5/2013 - version 4.1.11


-Fixed a bug in GroupTableHeader that didn't allow the moving of group columns in some cases.
-Fixed a bug in the filtering of columns that showed the dummy column as a valid choice.

18/4/2013 - version 4.1.10


-Fixed a bug in TableAssistant that wrongly deselects a group column that shares the same name with another one.

6/3/2013 - version 4.1.9


-Added option in SortTableModel for specifying the position of null values, beginning or end, during sorting.

27/2/2013 - version 4.1.8


-Added option in DefaultFilterRenderer for showing the filter icon inline in the header, instead of using a separate component.
-TreeTableModelAdapter now updates a single row, instead of the whole table, when a treeNodesChanged is received from the TreeTableModel.

29/1/2013 - version 4.1.7


-Fixed a bug with TableAssistant not being able to discriminate between group columns sharing the same header value.

24/1/2013 - version 4.1.6


-Fixed a problem with GroupTableHeader throwing a NullPointerException when the table argument to the getTableCellRendererComponent method of a TableCellRenderer is null.

22/1/2013 - version 4.1.5


-Fixed a problem with AdvancedTableHeader not setting header renderers correctly.

21/1/2013 - version 4.1.4


-Added methods to FilterHeaderModel for assigning and retrieving filters.

15/1/2013 - version 4.1.3


-AbstractTreeTableModel now makes sure to notify JTree's UI listeners first before anything else, after a model update.
-Improved AdvancedJScrollPane's painting performance when columns are being added or removed to the table.
-FilterHeaderModel is now repainted after a filter is added or removed from a column.
-A filter event is now propagated to listeners when a filter is removed from FilterHeaderModel.

9/1/2013 - version 4.1.2


-Fixed a bug in FilterHeaderModel throwing an exception when a filter is added to a column that does not have a filter installed.

7/1/2013 - version 4.1.1


-Added SingleTreeTableModel for easily displaying a treetable with a single column.
-ListRowHeader's updateUI method is now only called when the L&F changes.
-Fixed a bug with the table not being repainted correctly when the column selection changes in some cases where right fixed columns are used.
-Renamed DefaultPivotTableModel in the com.citra.table.db package to DefaultCrosstabTableModel, so that the names do not clash with classes from the pivot library.

21/12/2012 - version 4.1


-Removed the need for components modifying a table header, like FilterHeaderModel, TreeTableHeader, ViewableResizer, to use a renderer on each column. TableCellRenderers are now provided by specialized factory classes. This mechanism improves on memory, speed, manageability and simplicity.
-ListRowHeader's UI is now refreshed when the applications UI is updated, if the component is not visible.
-Improved performance of creating the column popup when a popup order of VIEW_ORDER is used.
-AdvancedJScrollPane now paints faster when locked rows/columns are used.

7/12/2012 - version 4.0.42


-Added methods to GroupTableColumnModelListener for notifying listeners when a group column's structure has changed.
-Fixed a bug with CheckBoxTreeSelectionModel not correctly adding selection paths when partial selection is enabled.

7/12/2012 - version 4.0.41


-Added method in DefaultTreeTableHeaderRenderer for returning the icon to be used at a given node in the header.
-TreeTableColumnModelMap now correctly invalidates the previous column count when an event is received from the underlying model.
-TreeTableModelMask now re-evaluates the root node when this changes from the underlying model.

3/12/2012 - version 4.0.40


-Improved performance of CheckBoxTree when partial selection is enabled.

19/11/2012 - version 4.0.39


-Buttons in TableAssistant's column dialog are resized to their preferred widths.
-Ensured that TableAssistant's column dialog always has the application frame as owner.

16/11/2012 - version 4.0.38


-Removed flicker from AdvancedJScrollPane when a fixed column exists on the right of the table and columns are added, removed or moved.
-ListRowHeader now starts counting from one, instead of zero.
-Fixed a bug with TreeModelMaps not correctly assigning a new underlying TreeModel.

13/11/2012 - version 4.0.37


-Fixed a bug with TableAssistant not correctly processing columns visibility if they share the same name with their group column parents.

12/11/2012 - version 4.0.36


-CheckComboBox's real renderer now changes whenever a new renderer is assigned.

10/11/2012 - version 4.0.35


-Removed reference to demo classes from the library, added by mistake.

6/11/2012 - version 4.0.34


-Improved performance of CheckComboBox.
-Fixed a bug with PopupFilterHeaderModel's filter popup not being displayed after the ok and cancel buttons were clicked.

20/10/2012 - version 4.0.33


-SortTableModel now by default uses a Comparator that compares objects according to their string values, if the objects do not implement the Comparable interface.

19/10/2012 - version 4.0.32


-Fixed a bug with AdvancedJScrollPane not respecting the ALWAYS horizontal scrollbar policy.

16/10/2012 - version 4.0.31


-Fixed a bug with LevelColumnFilterHeaderModel not correctly applying filters at the root level.

10/10/2012 - version 4.0.30


-TableAssistant's column dialog is now disposed for it to be garbage collected.

3/10/2012 - version 4.0.29


-Added support for converting filters from older table versions to the current one, as well as from .sciapp package filters to .citra (see FilterHeaderModel.convertFilterState).

28/9/2012 - version 4.0.28


-Added CheckComboBox, a combobox with checkboxes for selecting multiple values.
-Fixed a bug with TableAssistant reverting the widths of visible columns when another column was hidden and subsequently shown.

22/9/2012 - version 4.0.27


-Improved scrolling performance of the table header.

3/9/2012 - version 4.0.26


-Fixed a bug with the table state not being applied properly when the column dialog has not yet been initialized.

24/8/2012 - version 4.0.25


-TreeNodeComparator can now be serialized.
-Fixed a problem with NodeGroupingPanel not correctly synching with the model.
-Modified TreeFilterHeaderModel to use columns' model index parameter instead of the view index.
-Added support in TreeFilterHeaderModel for having filter controls in group columns as well.
-Added feature to TreeTableHeader that controls a parent's column visibility when this is expanded (see TreeTableHeader.setHideColumnOnExpansion).

29/7/2012 - version 4.0.24


-Fixed a bug with TableAssistant not behaving correctly when showing columns under a column group.

11/7/2012 - version 4.0.22


-Fixed a bug with the binary distribution throwing a NullPointerException when a PopuFilterHeaderModel is used.

6/7/2012 - version 4.0.21


-Fixed a bug with the mutiple selection filter in PopupFilterHeaderModel not showing correctly in some older java versions.

4/7/2012 - version 4.0.20


-Added a property in CheckBoxTree for notifying when the checkboxtree selection model changes.
-The buttons in TableAssistant's column chooser now always get updated whenever the table's row selection changes, no matter if the table has the focus.

2/7/2012 - version 4.0.19


-Improved performance of TreeTableHeader when synchronizing level and node filters.

29/6/2012 - version 4.0.18


-Level and node filters for the columns of a TreeTableHeader are now synchronized with each other.

25/6/2012 - version 4.0.17


-Fixed a bug in SpanDrawer when using a cellspan with a row or column span of ALL_ROWS or ALL_COLUMNS respectively, and the spanned row or column is not 0.

21/6/2012 - version 4.0.16


-Introduced ColumnNodeFilterMapper for filtering the nodes of a treetable column model at each node.

20/6/2012 - version 4.0.15


-Improved the performance of PopupFilterHeaderModel's multiple selection filter.

19/6/2012 - version 4.0.14


-Fixed a problem with FilterTableModel not behaving properly under java 1.7.

16/6/2012 - version 4.0.13


-Fixed a bug with LevelColumnFilterHeaderModel throwing an exception when the column levels is one.
-Added TableColumnFilter for filtering the table columns based on their model index attribute.

6/6/2012 - version 4.0.12


-Added method for loading and saving the filter state of a DefaultFilterTreeTableModel.
-The filters of a PopupTreeFilterHeaderModel can now be easily saved and restored by using the above DefaultFilterTreeTableModel methods.

31/5/2012 - version 4.0.11


-Fixed a bug with the table state not being applied properly when a TreeTableHeader is used.
-Fixed a bug with SortTableModel throwing a null pointer exception in some extreme cases.

20/4/2012 - version 4.0.10


-Fixed a bug with TreeTable not expanding and selecting nodes properly after a model update, if the root is shown.

13/4/2012 - version 4.0.9


-Fixed a bug in SortTableModel entering a loop when a DefaultSortTreeTableModel is used and the table's columns are being reconstructed due to an event.

29/3/2012 - version 4.0.8


-You can now assign a table header in SortTableModel at any given point.

16/3/2012 - version 4.0.7


-Fixed a bug with numerical filters not filtering out null values.

20/2/2012 - version 4.0.6


-Fixed a bug in SortTableModel and FilterTableModel not sorting/filtering correctly when they are in a not-allow sort/filter state respectively.

25/1/2012 - version 4.0.5


-PopupFilterHeaderModel now allows the selection of multiple filter values via a checkbox popup filter.
-Added options "is in" and "is not in" to the visual filters for selecting multiple filter values.
-Removed deprecated methods and variables from JAutoFilter and PopupFilterHeaderModel.
-Fixed a bug in AdvancedJTable with tooltips not displaying properly when the table's model changes and the tooltip is about to show.

19/1/2012 - version 4.0.4


-Added option in VisualFilters for having a text or a combo box as input for the filter values.
-Custom AutoFilterPanels can now be assigned without the need for subclassing JAutoFilter.
-Added options "is empty" and "is not empty" to the visual filters.
-Added GenericVisualFilter that is used by GenericAutoFilterPanel for filtering objects other than strings, dates, booleans or numbers.
-Added method in CustomPopupFilterHeaderModel for installing custom filters programmatically.
-Improved AutoFilterPanels by copying instead of assigning the various Filter objects.
-Custom filter selection in the autofilter dialog is cancelled, and not removed, when the custom filter dialog is closed by clicking on the 'X' top right close button.
-VisualFilters are now not applied when the filter value is empty. The options "is empty" and "is not empty" can be used instead.
-Fixed a bug with ListRowHeader not correctly displaying tooltips.
-Added a few modifications to the Demo classes.

14/1/2012 - version 4.0.3


-TristateCheckBox is now enabled only with the left mouse button.
-The order of both visible and invisible columns is now persisted when saving and restoring the table state of an AdvancedJTable.
-Added modes in ListRowHeader so that the preferred width is calculated, according to the first, last or all of its rows.
-Added a checkbox in the column dialog of TableAssistant, for selecting/deselecting all columns with one click.
-Fixed some issues in the column dialog regarding the key search functionality.
-The buttons in the column dialog are now updated only when the user finalizes the column selection.
-Fixed a bug in TableAssistant not correctly building the column popup menu, when a mode of PUSH_INVISIBLE_TO_END is used.
-The group column state can now be saved and restored in GroupTableHeader.

12/1/2012 - version 4.0.2


-PopupFilterHeaderModel can now be garbage collected without the need for calling the removeFromTable() method.
-Fixed a bug in SortTableModel and FilterTableModel not working properly when assigning a new underlying model.
-When removing sort columns in SortTableModel by holding down the Alt key, menus in the application frame do not become selected.
-When hiding columns using the column dialog, TableAssistant makes sure that at least one column will be visible, no matter if the last column is present.
-When hiding the only visible column using the column dialog, that column remains visible, instead of showing the first one in the table.

10/1/2012 - version 4.0.1


-Fixed a bug with SpanDrawer not taking into account the updateSelections flag when selecting merged cells.

8/1/2012 - version 4.0


-Renamed packages from com.sciapp. to com.citra.

25/11/2011 - version 3.9.55


-AdvancedJTable now correctly repaints the selections when using merged cells.
-Added method to TableAssistant for repositioning the columns in the column dialog according to the order in the column popup (TableAssistant#orderDialogToPopup)

22/11/2011 - version 3.9.54


-Fixed a bug in DefaultSortTreeTableModel and DefaultFilterTreeTableModel throwing an exception when the underlying models are updated and the affected nodes are not visible.
-Added GenericAutoFilterPanel for filtering objects other than strings, dates, boolean and numbers. This panel uses a java.text.Format in order to convert the filterable objects to strings and vice-versa.
-Updated StringFilter to keep the object assigned as the filter pattern, instead of converting it to a string.

26/9/2011 - version 3.9.53


-Fixed a bug with GroupTableHeader not updating columns correctly when they are moved programmatically.

6/9/2011 - version 3.9.52


-Fixed a bug with TreeTable not updating correctly when a tree node is removed from an expanded node.

5/9/2011 - version 3.9.51


-Fixed a bug in SortTableModel and FilterTableModel throwing an exception when a ListTableModelWrapper is used as the underlying model.
-Fixed a bug in DefaultFilterTreeTableModel throwing an exception when a child is inserted to a node that is not visible.

25/8/2011 - version 3.9.49


-Fixed crash in AdvancedJScrollPane in jre 1.7.
-Improved searching by adding the ability to search for values other than the ones returned from the table (e.g. values in renderer).

18/8/2011 - version 3.9.48


-Fixed notifications sent from underlying TreeTableModels in TreeTableModelMasks, when the notification is a node changed event.

21/7/2011 - version 3.9.47


-Fixed a bug with JTable crashing when a row is removed and the row height is being changed for the first time.

20/7/2011 - version 3.9.46


-Created ColumnChooser class that contains the dialog for managing the columns of a table.
-The column dialog is now properly resized.
-Key presses on the table of the column dialog will now find the next possible column name match.

21/6/2011 - version 3.9.45


-Previously expanded nodes and cell selections are now restored in a TreeTable, after a model update.

17/6/2011 - version 3.9.44


-After cell editing, the edited cell is now selected.
-Fixed a bug in TreeTable not repainted correctly after a data update.

18/4/2011 - version 3.9.43


-Dialog in CustomPopupFilterHeaderModel is now disposed after being closed, so that it can be garbage collected.

5/4/2011 - version 3.9.42


-Added method to CheckBoxTree to determine whether the checkbox of a given tree path can be selected/deselected from the UI.

15/3/2011 - version 3.9.41


-Optimized table painting routines when the table's selection changes.

28/2/2011 - version 3.9.40


-Fixed a bug in TableAssistant not correctly populating the column dialog when group columns are defined.

17/2/2011 - version 3.9.39


-DefaultSortTreeTableModel and DefaultFilterTreeTableModel now send a more indicative tree model event, when nodes have been removed.

15/2/2011 - version 3.9.38


-Fixed a bug with moving a column at the beginning, when AdvancedJTable has the first column fixed.
-TableCellResizer and TableAssistant now take into consideration the cell spans when auto-resizing columns.
-When the treetable is expanded, selections are disabled until the mouse is released.
-Fixed a bug with the COMMIT_EDIT mode of the table, that was causing duplicate calls to setValueAt.

13/2/2011 - version 3.9.37


-Optimized cell rendering when a viewable resizer is in use.
-Optimized cell rendering when merged cells are present.

1/2/2011 - version 3.9.35


-Defined editing behaviour in AdvancedJTable when the table is editing and its data model changes. Default behaviour is to discard any changes made.

15/12/2010 - version 3.9.32


-Fixed a bug with columns not being correctly moved, added or removed in a TreeTableHeader.

11/12/2010 - version 3.9.31


-Updated some javadoc comments.
-Added method in TableAssistant for recreating the column popup and dialog.
-Fixed a few bugs with the acceptNull property of Filters.
-CustomPopupFilterHeaderModel is initialized with the filter currently assigned.

17/11/2010 - version 3.9.26


-Added method for invalidating the columns of a TreeTableColumnModel.
-The component of DndSupport can now be changed anytime.

11/11/2010 - version 3.9.25


-Some minor improvements regarding spanned cell rendering.

26/10/2010 - version 3.9.24


-Included an option to SpanDrawer to make it make the table's cell grid lines itself, instead of the table (see setBorderPainted).

19/10/2010 - version 3.9.23


-Improved the rendering of TreeTableHeader.

14/10/2010 - version 3.9.18


-Now able to get the height of a group column as it appears in the header.
-Added method groupLevelAtPoint in GroupTableHeader, to get the level of the group column at a specified point.
-Reorganized classes in the com.sciapp.table.group package.
-Fixed an issue with eclipse hanging when using the library in design time.

8/10/2010 - version 3.9.15


-CheckBoxTree now uses a WrapperCellRendererPane instead of a JPanel for its renderer.
-Fixed a bug in TreeColumnModelMask when the underlying's model root is changed.

6/10/2010 - version 3.9.14


-Added method in DefaultFilterTreeTableModel for clearing the filtering states.
-Added option in NodeTreeTableModelMap to show the node's children.

30/09/2010 - version 3.9.13


-Added column listener to ViewableResizer for attaching it to columns that have been added.
-Improved the design of the TreeHeaderControl, so that events are processed by the renderers.

23/09/2010 - version 3.9.11


-Fixed a problem with setting a new style to TableStyleSelector.

22/09/2010 - version 3.9.10


-Implemented 'column mode' search for the search panel.

13/09/2010 - version 3.9.9


-Added option to SearchPanel to control whether the search should be reset when the search text changes.

7/09/2010 - version 3.9.8


-TreeTable now repaints itself appropriately when the icons of the tree cellrenderer change.

6/09/2010 - version 3.9.7


-TableAssistant: the column header's value is now not casted into String.
-SortTableModel: added method for setting the SortTableModel's renderer.

1/09/2010 - version 3.9.6


-DefaultVetoableColumnModel now uses the columns's model listenerlist for the vetoable column model listeners.
-CheckBoxTree repaints itself when the partial selection mode changes.

31/08/2010 - version 3.9.5


-The TreeTable tree's UI now remains unchanged after the tree is made visible.

26/08/2010 - version 3.9.3


-Fixed a bug with ListRowHeader not registering with the table's datamodel, if this has been changed.
-Modified SortTableModel so that developers can have control before/after a mouse is clicked on the sortable header.
-Fixed a bug in TableAssistant not behaving correctly when two or more columns have the same name.
-The LockedTableModelEvent now includes the previous amount of fixed rows/columns in use.
-Modified SearchPanel's behaviour so that a match is found when there is a single match in the table.

25/08/2010 - version 3.9.2


-Added methods for converting row indexes between the model and the view for TableModels that are wrapped with a SortTableModel and/or a FilterTableModel (TableUtils).
-Fixed a bug with the 'alt' key not being passed to the mouse event on the header in some cases, when fixed columns are in place.
-Fixed a bug with the column popup not being updated correctly when reordering group columns with the mouse.

10/08/2010 - version 3.9.1


-Added option for 'not equal' for comparison filters.
-The box for the custom filters is now limited to 200 pixels in width.
-Fixed a bug with GroupTableHeader throwing a null pointer exception when it is removed from the view.

18/06/2010 - version 3.9


-Organized imports in source code classes.

17/06/2010 - version 3.8.47


-Added method in WrapperCellRendererPane for getting the wrapped component.

16/06/2010 - version 3.8.46


-Sorting with SortTableModel is now not invoked if the user clicks on the group of a sortable column.
-The expanded nodes in the column dialog of TableAssistant are now maintained when the user clicks on the 'ok' button.
-Groups in the column dialog of TableAssistant can now be created even for single columns.
-Users can now reorder group columns in a GroupTableHeader with the mouse.

19/5/2010 - version 3.8.45


-PopupFilterHeaderModel now uses a separate renderer in order to layout the filterable header component.

17/5/2010 - version 3.8.44


-Added methods to PopupFilterHeaderModel for setting/getting the filtered/unfiltered color to use for the filter arrow.
-Added method to TreeTable for evaluating the amount to displace the editing component of a cell by, due to the presence of the tree icon.

20/4/2010 - version 3.8.43


-Added string for defining the text of the 'Clear' button in TableLibraryBundle.properties
-If TableResourceManager cannot find a string translation, it returns the default value
-The dialog for the date chooser panel now uses the CLEAR_BUTTON string in TableLibraryBundle.properties
-Added methods to DateEditor and DateVisualFilter for controlling whether the current system date should be displayed, if the selected date is null.
-Added methods to JDateChooser for controlling whether the selected date should be kept, as the user changes the month or year.
-Added method to AdvancedJTable and AdvancedTableHeader for handling mouse events, before they are passed to any mouse listeners.
-The rendering and control of TreeTableHeader's expandable columns is now being delegated to a TreeHeaderControl.

16/4/2010 - version 3.8.42


-Made appropriate changes to the library so that it will work with the pivot table api.

10/4/2010 - version 3.8.41


-Certain SortTableButtonRenderer's optimizations.
-Added option to DefaultTreeTableHeaderRenderer to control whether a separate component is used to layout the tree's expansion control on the header.

8/4/2010 - version 3.8.40


-Fixed a bug with the custom dialog throwing a NullPointerException when the sources were compiled with jdk 1.5 or higher.
-Added IF_LARGER_RESIZE resize mode to TableAssistant that resizes columns only if the calculated size is larger than then current one.

26/3/2010 - version 3.8.39


-Modified TableAssistant so that if all columns under a group column are made hidden, a subsequent showing of the hidden column group will make all columns visible under that group column.

24/3/2010 - version 3.8.38


-Fixed some issues with TableAssistant's behaviour when making columns under a group column visible/invisible.
-TableAssistant's column dialog now uses a partial CheckBoxTree to display the visibility status of a TableColumn.

23/3/2010 - version 3.8.36


-Fixed a bug with AdvancedTableHeader's getComponentAtPoint method.
-NumericalVisualFilter now uses a NumberFormat in order to display numbers in its textbox.
-JDateChooser now updates the months when the system locale is changed.
-Filter values of the custom filter dialog are now loaded faster.

08/3/2010 - version 3.8.35


-TableAssistant now does not update the ui after a change in the more column dialog.

04/3/2010 - version 3.8.34


-Custom filters on a CustomPopupFilterHeaderModel are now not applied to the header, if the filter is invalid.
-Fixed a bug in AdvancedJTable when the getColumnName method is called on a column representing the dummy column.
-Fixed a bug in GroupTableHeader when the group table column model is changed.
-ViewableResizer now behaves correctly when the header's group table column model is changed.
-Fixed a rendering error when using ViewableResizer.

02/2/2010 - version 3.8.33


-Fixed table key navigation with merged cells and when the table uses a single selection mode.

01/2/2010 - version 3.8.32


-Fixed an issue with AdvancedJScrollPane not painting correctly when columns are being resized.
-SpanDrawer now correctly paints merged cells when the table uses a single selection mode.

27/1/2010 - version 3.8.31


-Fixed a bug with the table's merged cells not being repainted correctly after a selection event.

25/1/2010 - version 3.8.29


-Fixed a bug with TableAssistant throwing a NullPointerException when moving colums and a TreeTableHeader is used.

23/1/2010 - version 3.8.28


-Removed deprecated methods and classes.
-Setting the table state now works even if group columns are present.
-TableAssistant now won't allow removal of all columns either from the column popup or the dialog.
-Added methods to CheckBoxTree that allow to control the checkbox displayed at each path.

14/12/2009 - version 3.8.26


-Fixed a bug with group columns not painting correctly when they are part of locked columns.

05/12/2009 - version 3.8.25


-Added option to ListRowHeader to select whether automatic resizing is enabled.
-Optimized drawing of spanned cells while dragging a column with the mouse.

04/12/2009 - version 3.8.24


-Fixed a bug with ViewableResizer setting its opaque property to false, having as result background colors not being painted.

03/12/2009 - version 3.8.23


-TableAssistant will now revert changes made to the column positions using the column dialog, if the new positions cannot be applied (e.g. due to the presence of a VetoableTableColumnModel)

01/12/2009 - version 3.8.22


-Added option to TreeTable for assigning a different column for the tree, other than the first.
-Added DynamicTreeMapReorder that is suitable when using DefaultSortTreeTableModel with a DynamicTreeTableModel.
-Added reset button to the column dialog, for undoing changes such as grouping, renaming etc.
-ListRowHeader now automatically resizes to its contents.
-Fixed a minor paint issue in AdvancedJScrollPane when locked columns are in place.
-Added methods to TableAssistant for defining the order in which the columns appear in the column popup.

24/11/2009 - version 3.8.20


-Added method in DefaultSortTreeTableModel for clearing the sorting states.

20/11/2009 - version 3.8.19


-Exceptions (if any) are now being printed out, when FilterHeaderModel loads or saves the filter state.
-The limitation for having the default cursor on the header has now been lifted.

16/11/2009 - version 3.8.17


-Fixed a bug with the column's renderer background color not being applied.

10/11/2009 - version 3.8.16


-Certain AdvancedJScrollPane optimizations.
-SortTableModel getDefaultComparator method now scans super interface hierarchy if supplied class is an interface.
-Added methods to TableCellResizer to determine whether a cell is resizable.
-Added method to TableAssistant to determine whether columns in the column dialog are reorderable.
-Made ViewableResizer work for locked columns/rows.
-Added method to SpanDrawer that determines whether the table uses a fixed row height, in which drawing is faster.
-Refactored remove method of com.sciapp.table.cache.Cache to return the object that was removed from the cache.
-Added class TreeTableModelMask that enables a TreeTableModel to be constructed, based on an underlying TreeTableModel instance.
-Fixed a bug with DynamicTreeTableModel not resetting the value of the root node after a table structure event.
-Fixed a few bugs in TreeTableHeader, relating to the structure of a node in the model having changed.
-Added class TreeTableColumnModelMask that wraps around any TreeTableModel in order to provide for a TreeTableColumnModel.
-Introduced caching of column count and column enumeration in DefaultTreeTableColumnModelAdapter for faster drawing.

06/10/2009 - version 3.8.4


-Fixed a bug with FilterTreeTableModel throwing an exception when a node's value is changed.
-Optimized TreeTableHeader.
-Fixed a bug with TreeTableHeader not expanding nodes via the header, when a ViewableResizer is in use.

22/9/2009 - version 3.8


-Table cells and header columns can now be resized to their viewable dimensions while being painted, via a ViewableResizer.
-Fixed a bug with TreeTable not working properly when the tree's root is visible.
-Table Assistant can now be released from a previously assigned JTable.

13/8/2009 - version 3.7


-TableAssistant now exposes methods used to calculate the cell's preferred width.
-AdvancedJTable now contains method for assigning your own TableAssistant object.
-The 'More' column dialog now does not include reorder buttons if the table header is not reorderable.
-Fixed a bug with SortTableModel converting underlying model's structure change events to data changed events.
-Fixed a bug with TreeTable consuming key events when a row is not selected.
-Fixed a bug with TreeTableModelAdapter firing invalid inserted and deleted table model events when a node is expanded/collapsed respectively and the node does not have any children.

23/6/2009 - version 3.6.9.6


-Fixed a bug with JDateChooser not updating the calendar panel to the correct year when the year is entered by hand and the year text field loses focus.
-AdvancedJScrollPane now displays locked columns even if the dummy column is not present.
-Fixed a bug with AdvancedJScrollPane sometimes painting 'bogus' data outside the painting region in Java 1.5.

15/5/2009 - version 3.6.9.4


-Fixed a problem with the internal list returned from TableModel and TreeTableModel wrappers, such as SortTableModel, ComparableTreeTableModel etc.
-Improved GroupTableHeader rendering.
-Fixed a bug with GroupTableHeader when moving a group column within a group.
-Added method isReorderingAllowed(Point) to AdvancedTableHeader, to decide whether reordering of a column should be initiated.

7/5/2009 - version 3.6.9.1


-Fixed a bug with FilterTableModel and TreeTableModelAdapter giving out an exception when inserting new rows to the table.

6/5/2009 - version 3.6.9


-Fixed an issue that appeared recently in Java 1.6.10, causing AdvancedJScrollPane to keep a high CPU usage.
-Optimizations in ComparableTreeTableModel.
-Fixed a bug in TableAssistant's more dialog, that was causing inconsistencies between the dialog and the table view, when making columns invisible.
-Added option to TableAssistant to resize a column using both its cell and header contents.

23/3/2009 - version 3.6.6


-Made most classes serializable.
-TreeTableModelAdapter now fires more indicative TableModelEvents upon tree expansions or model changes, instead of a general update.
-Fixed a bug with TableAssistant's column dialog not applying the column width when the 'Enter' key is pressed.

11/12/2008 - version 3.6.5.13


-Added option to turn on/off column renaming in the 'more...' dialog of the column popup.
-Optimized FilterTableModel and SortTableModel.
-Fixed a bug in AdvancedJTable with setting the column table state.
-Fixed a bug in TableReorder when reselecting rows and columns after a model refresh.
-Fixed a bug in AdvancedJScrollPane to correctly convert the y-ordinates when locked rows are used.
-DynamicTreeTableModel now takes the alwayscreategroup value of a TreeTableComparator into account.

28/7/2008 - version 3.6.5.2


-Fixed tooltip in column header not appearing when a PopuFilterHeaderModel is used.
-Made available the ok and cancel buttons in AutoFilterDialog.
-Fixed a bug where a table search ended up in an endless loop.
-Updated com.sciapp.tree.TreeTable to incorporate the latest changes in cell spanning.
-Added AggregateTreeTableModel and TreeNodeAggregator in the com.sciapp.treetable package that provides an easy way to evaluate aggregates in a treetable.
-Fixed a memory leak bug in SortTableModel.
-Fixed a bug in TableAssistant not showing a group column that was removed via the column popup and subsequently added.
-Fixed table scrolling when locked cells are in place.
-Fixed bug in AdvancedJScrollPane not showing correctly when it is inside an InternalFrame.

2/4/2008 - version 3.6.4.2


-Fixed a bug with reselecting the checkboxes of a CheckBoxTree inside a TreeTable when the underlying model changes and the CheckBoxTree has partial selection set to true.
-Greatly improved the cell spanning drawing performance.
-Fixed a bug in AdvancedJScrollPane not correctly painting the viewport when locked rows/columns are in place.
-Improved FilterTableModel's performance and added a flag to determine whether the model will assume that all data have changed when a fireTableDataChanged event has been issued from the underlying model (see setClearOnDataChanged method).
-Added methods in SortTableModel for comparing the rows of the underlying TableModel.

3/3/2008 - version 3.6.3


-Fixed a bug with reselecting the checkboxes of a CheckBoxTree inside a TreeTable when the underlying model changes.
-Fixed a bug with RowHeader not resizing its cells when the row heights change.
-Fixed a bug with TableCellResizer allowing to resize cells that are part of a cell span.

29/2/2008 - version 3.6.2


-Optimized span drawing painting.
-Fixed a problem with AdvancedJTable showing tooltips at a displaced location when locked columns/rows are used.
-Added the ability to apply filters by pressing the 'enter' key on the custom filter dialog.

4/1/2008 - version 3.6


-Added TristateCheckBox that adds a 'partial-selection' state to JCheckBox.
-CheckBoxTree now uses a TristateCheckBox for showing partial node selections. The mode can be controlled with the setPartialSelection method.
-Added TableCellResizer, a class used to resize rows and columns of a table by dragging the mouse over a cell border.
-Added NonContiguousSelectionModel, a class that enables non-contiguous cell selection for a JTable.
-Added ListRowHeader which is a replacement for JTableRowHeader.
-Incorporated NonContiguousSelectionModel and TableCellResizer into AdvancedJTable and its subclass, TreeTable.
-Corrected a bug with AdvancedJScrollPane not correctly converting the x-coordinates of mouse events when a row header is present.

14/12/2007 - version 3.5


-Added methods to GroupTableColumnModel for easily interrogating a group column structure.
-Reshaped GroupTableColumnModelEvent and GroupTableColumnModelListener in order to get more information about group column changes.
-Implemented the required methods of GroupTableColumnModel in DefaultGroupTableColumnModel.
-AdvancedJTable now also converts the y-ordinate of mouse events when locked columns/rows are used.
-Added method canMove to AdvancedTableHeader and made it implement VetoableTableColumnModelListener in order to be able to easily
prevent the moving of columns.
-Optimized GroupTableHeader's drawing routines and added the ability for group columns to use their own TableCellRenderer.
-Optimized TreeTableHeader's drawing routines and added the ability for expandable columns to use their own renderer, ie TreeTableHeaderRenderer.
-Added an abstract TreeTableColumnModelAdapter implementation to serve as a basis for implementing a column model for a TreeTableHeader.
-Optimized PopupFilterHeaderModel drawing routines.
-Removed methods and classes with deprecated warnings.

11/12/2007 - version 3.4.8


-Fixed tooltips not showing when using spanned cells.
-Fixed mouse and keyboard navigation for locked rows/columns.

25/9/2007 - version 3.4.7.14


-Fixed a bug in AdvancedJTable cancelling the editing of a cell, when it received a tableChanged event.
-Improved SearchTablePanel by using different background/foreground colors when the search text is not found and by setting the focus to the requesting search field.

8/8/2007 - version 3.4.7.12


-Fixed a bug in PopupFilterHeaderModel throwing a null pointer exception when the headermodel was removed from the table.

24/7/2007 - version 3.4.7.11


-Fixed a few bugs with TableSearch.
-SearchPanel is now able to track changes to a TableModel upon which search highlight actions are initiated (see SearchPanel.register).
-The checkboxtree's selections of a dynamic treetablemodel are now restored after the model changes.
-Added refreshPopup() method in TableAssistant for reinitializing the column popup with values from the column model.

10/7/2007 - version 3.4.7.5


-Fixed a bug with SortTableModel not generating a TableModelEvent properly.
-Fixed the search style so that it is correctly updated when columns are moved inside the table.
-The table is now updated when selections are made with CheckBoxTree programmatically.
-The CheckBoxTree now clears its selections when the tree structure is updated.

3/7/2007 - version 3.4.7.4


-Fixed a bug with the DOES NOT END WITH option of a string filter.
-Made AdvancedJScrollPane accept a JPanel as the row or column header.
-Fixed a few bugs with SortTableModel and FilterTableModel.
-Made DefaultFilterTreeTableModel and DefaultSortTreeTableModel to behave properly when getAllowFilter/getAllowSort is false respectively.
-TableStyleSelector's style is only applied for cells that are highlighted.
-The search panel's string filter can now discern between strings, dates and booleans so that it can filter values appropriately.
-The cell selection after a sucessfull search now stops at the first cell found.
-Fixed a bug with TableStyleSelector looping indefinitely on some occasions.

15/6/2007 - version 3.4.7.2


-Added highlight feature in search panel.

13/6/2007 - version 3.4.7


-Introduced the com.sciapp.table.search package for searching the rows of a JTable.
-Fixed some issues with AdvancedJScrollPane not painting properly if locked columns are installed and the row/column headers are not JTableHeaders.

15/5/2007 - version 3.4.6


-Declared public method for showing the more panel in TableAssistant.
-Improved SortTableModel.

23/4/2007 - version 3.4.5.8


-Added a method in JDateChooser for assigning the default time when the chooser first appears (setDefaultTime).

17/4/2007 - version 3.4.5.7


-SortTableModel and FilterTableModel now leave the modified sort/filter indexes intact when the underlying model changes completely and getAllowSort/getAllowFilter is false.

13/4/2007 - version 3.4.5.6


-Fixed a bug with AdvancedJTable not correctly assigning the auto resize mode when the last column is not visible in the table.
-Fixed a bug with AdvancedJTable not removing the first column when this is fixed.

11/4/2007 - version 3.4.5.4


-Fixed a bug with DistinctDatabaseTableModel not correctly returning the row count when null values are present.

29/3/2007 - version 3.4.5.3


-Added DistinctDatabaseTableModel for retrieving the unique values from a database into a table model.
-Fixed a bug with AdvancedJScrollPane not correctly converting x-ordinates when locked columns are present.
-Updated FilterHeaderModel so that it is now possible to install table filters for columns that are not visible in the table.
-Updated JDateChooser to optionally show the seconds in the time box.

19/3/2007 - version 3.4.5.1


-Added syncWithModel method in DatabaseGroupingPanel for synchronizing the model with the panel.

13/3/2007 - version 3.4.5


-Added methods in VisualFilter subclasses for retrieving the various UI components used.
-Fixed some drawing bugs with FilterHeaderModel.
-Fixed a bug with DefaultSortTreeTableModel raising an ArrayIndexOutOfBounds exception when the underlying model changes.

1/3/2007 - version 3.4.4.3


-Fixed a bug with DefaultDatabaseTreeTableModel not using filters correctly.
-Fixed a bug with DirectoryTreeTable not initializing.
-Improved GroupTableHeader to make the paint procedure more optimized and to accept a JPanel as a TableCellRenderer.
-The components that make use of the resource bundle can now be re-initialized with new property values, when their UI is updated, without having to reload the application.

28/12/2006 - version 3.4.4


-Added a method to FilterHeaderModel in order to iterate over the installed filters.
-Changed the TreeTableColumnModelAdapter class to an interface.
-Fixed a bug with the TableAssistant's select method.
-Added ListTableModelWrapper for providing sorting/filtering capabilities to a TableModel that does not implement the ListTableModel interface.

1/12/2006 - version 3.4.3


-Fixed a bug with TableReorder throwing an exception when trying to select rows in the table that do not exist.
-Added an option in TreeFilterHeaderModel to define whether a filter on a column will be removed if the column is no longer visible in the table.
-Added options in PopupTreeFilterHeaderModel for the arrow button's color and position.
-Improved the design of ColumnFilterMapper.
-Improved DefaultFilterTreeTableModel so that it updates only nodes whose filter is changed.
-Added NodeTreeTableModelMap for showing a single branch of a TreeTableModel.
-Added UniqueTreeTableModel for building a set of unique tree nodes at each tree level.
-Fixed some issues with TreeTableHeader not correctly displaying columns when the underlying TreeTableColumnModel changes.
-Added TreeTableColumnModelMap for wrapping around a TreeTableColumnModel in order to provide sorting and filtering capabilities.
-Added PopupTreeFilterHeaderModel suclasses in the com.sciapp.table.group package that allow the filtering of table columns via a drop down button that is installed on each column.

21/11/2006 - version 3.4.2.1


-Fixed an issue with TreeTableModelAdapter throwing an exception if the root node is null.
-Fixed a repaint issue in TreeTable with a CheckBoxTree if non-scrollable columns are in use.

20/11/2006 - version 3.4.2


-Introduced TreeFilterHeaderModel and associated classes for providing a filterable column header component for TreeTableModels.
-Introduced CheckBoxTree, a JTree subclass that shows a checkbox for every node in the tree.
-Improved the design of TreeTable and TreeTableModelAdapter so that any JTree can be assigned to a TreeTable, such as a CheckBoxTree.
-Added an option in PopupFilterHeaderModel to show or hide the popup menu after a value selection is made.
-Added ListTableFilter and ValuesTableFilter for filtering the rows of a TableModel based on a list of rows and values respectively.
-Fixed a bug with TreeTable not setting a new TableReorder correctly.
-Fixed some issues with DefaultSortTreeTableModel and DefaultFilterTreeTableModel crashing when the underlying data model changed.
-Added methods in FilterTreeTableModel for allowing the assignment of TableFilters at each node or tree level.
-Added TreeNodeEnumeration and LevelNodeEnumeration for enumerating through the nodes of a TreeModel.
-Implemented the new methods specified by FilterTreeTableModel in DefaultFilterTreeTableModel.

30/10/2006 - version 3.4.1


-Fixes a bug with TreeTable not expanding/collapsing rows when locked columns are used.
-Added setRows method to ObjectTableModel.
-Fixed a bug with SortTableModel and FilterTableModel throwing an IndexOutOfBoundsException in some cases.
-SortTableModel and FilterTableModel now override the tableChanged method instead of fireTableChanged.

27/10/2006 - version 3.4.0.1


-Fixed a bug with AdvancedJScrollPane not locking the right portion of fixed columns correctly.
-Fixed a rendering bug in TreeTableHeader when columns at higher tree levels were added.
-Included updated manual covering TreeTableHeader and VetoableColumnModel in release.

26/10/2006 - version 3.4


-Introduced TreeTableHeader, a JTableHeader subclass capable of displaying table columns in a hierarchical structure.
-Introduced VetoableTableColumnModel, a TableColumnModel which can 'veto' (prevent) table columns from being added, removed or moved.
-Tooltips are now visible on the first column of a treetable.
-Included an option to enable/disable column grouping from TableAssistant's column dialog.
-Column width, visibility and moving of columns in the column dialog can now occur for multiple selections.
-Added a method to TableAssistant to make the column dialog visible programmatically.

4/10/2006 - version 3.3.5.7


-Fixes a bug with SortTableModel not sorting null values properly.
-DateFilter can now be serialized.
-TreeTable's selections are now preserved when a node is expanded.
-Added key navigation for the TreeTable.
-TreeTable's selections are preserved when the expand/collapse icon is clicked with the mouse.
-DefaultFilterTreeTableModel and DefaultSortTreeTableModel now correctly update themselves when the underlying model changes.
-Added shouldFilter and shouldSort methods in DefaultFilterTreeTableModel and DefaultSortTreeTableModel respectively to allow the behaviour of the filtering and sorting to be easily modified.

27/9/2006 - version 3.3.5.6


-Fixed a bug in ArrowButton not setting the correct color in the constuctor
-Added methods in TableAssistant to select the resizing function to perform when the user double-clicks on a column border.
-Fixed a bug in CachedTableModel not correctly setting the cache store.
-Added method in AbstractTreeTableModel that assigns the root node.
-Fixed a bug in TreeTableModelMap returning null instead of the node's value in some cases.

8/9/2006 - version 3.3.5.4


-DefaultMutableTreeTableModel is now editable (via the setEditable(boolean) method).
-TableReorder now also restores column selections.
-Added ListTreeTableModel.
-Fixed a bug with scrolling the table while having frozen columns.
-Added the ability to SortTableModel and FilterTableModel to specify whether sorting and filtering respectively should be performed when the underlying data changes.
-Fixed a bug with moving group columns with the mouse.
-Added methods to TableAssistant for resizing the columns to the header or column contents.
-Addded TABLE_ASSISTANT_GROUP_NAME key in TableLibraryBundle.properties that identifies the text to display when creating a group column at runtime.

21/7/2006 - version 3.3.5.2


-GroupTableColumns can now be reordered with the mouse.
-FilterTableModel and SortTableModel now behave properly after the underlying model has been updated.
-Fixed some paint bugs regarding AdvancedJScrollPane and locked rows/columns.
-ObjectTableModel now implements ReorderModel for sending a map of how the rows have changed after an update, in case this is not possible with any of AbstractTableModel's fire methods (like the removal of non-consecutive rows).
-Added methods in ObjectTableModel for inserting rows to the model.

10/7/2006 - version 3.3.5.1


-Modified the com.sciapp.filter and com.sciapp.filter.auto packages in order to make available the combo box instances of the filter table panels.
-Added the feature to group/ungroup columns at runtime via TableAssistant's 'More' panel.

29/6/2006 - version 3.3.5


-TreeTable now does not allow cell editing in the first (tree) column if the user clicks with the mouse on the expand/collapse (+/-) icon.
-Fixes some paint problems with the GroupTableHeader.
-TableAssistant's 'More' panel has been extended to include setting the column width, showing/hiding the columns and changing their order and name.
-There is now the option in JDateChooser to hide/show the date and time selection panels.
-Added the moveNode method in MutableTreeTableModel that moves one or more nodes within the same node.
-Fixes a bug in SortTableModel that wasn't sorting properly when table columns were reordered.
-TreeTableModelMap overrides the isHeader,isFooter and isAggregate methods for delegating them to the underlying treetable model.

21/6/2006 - version 3.3.4


-DefaultFilterTreeTableModel and DefaultSortTreeTableModel can now wrap any TreeTableModel implementation.
-FilterTableModel and SortTableModel now convert the TableModelEvent received from the underlying TableModel according to the (row) transformation performed.
-Included the shouldToggleExpand method in TreeTable that defines when a node should be expanded/collapsed.

19/6/2006 - version 3.3.3b


-Added TableDefinition class for easy defining the structure of a table model.

30/5/2006 - version 3.3.3


-Added ExportManager for exporting the data of a tablemodel to an OutputStream.

25/5/2006 - version 3.3.1


-Improved the non-scrollable rows/columns framework (still experimental).

18/5/2006 - version 3.3


-DirectoryTreeTableModel now extends MutableTreeTableModel instead of AbstractTreeTableModel.
-Fixed a bug with TreeTableModelAdapter not expanding the root node when nodes are inserted.
-Added methods to MutableTreeTableModel for adding columns and defining their class.
-Introduced ComparableTreeTableModel, a MutableTreeTableModel subclass, whose tree structure is dictated by a set of TreeTableComparators.
-Added TreeNodeComparator for comparing the nodes of a treetable model.
-Added NodeGroupingPanel, a panel through which users can dynamically control the structure of a ComparableTreeTableModel.
-TreeTableComparator now defines if a group node should be created if there is only one child at its corresponding tree level.

4/5/2006 - version 3.2


-Modified Filters, SortTableModel and DynamicTreeTableModel so that it is possible to easily save and load their states.
-Added SizeRenderer which displays the length of a file on a table's cell.
-Made StatusPanel show text retrieved from the resource file.
-Added DirectoryTreeTableModel and related classes for displaying a directory structure.
-Added SortTreeTableModel, FilterTreeTableModel that provide a sortable and filterable representation of a treetable model respectively.
-Added MutableTreeTableModel for dynamically adding and removing tree nodes, independent of any underlying data.
-Added DefaultTreeTableReorder that takes care of row selections when the data of a treetable model are reordered in some way.
-Moved the methods of AggregateRow that deal with aggregate data to its superclass, TreeTableRow.
-Added the isRangedModel method to CacheableTableModel and CacheableTreeTableModel that determines whether data can be fetched in ranges.
-Added a special PivotTableModel implementation, MSAccessPivotTableModel, for dealing with pivot tables with Microsoft Access Databases.
-Modified SQLFilterConverter to be able to convert a BooleanFilter to an sql statement.

17/4/2006 - version 3.1


-Provided a fix for the time field of the JDateChooser by disabling the deletion keystrokes.
-Modified DateFilter to return the date comparator used when filtering
-Added ignore time option in DateVisualFilter.
-Modified DateVisualFilter to display the time as well, when the filter is set not to ignore time differences.
-Provided an experimental package for adding locked rows/columns (com.sciapp.table.locked).
-For a GroupTableHeader, made it possible to control the visibility of the columns underneath a group column.
-Modified TableAssistant to limit the number of columns in the column popup and to provide a dialog for more column options.
-Fixed a bug with SortTableModel not showing the data when it is initialized with a ListTableModel that contains some data.

3/4/2006 - version 3.0.1


-Fixed a bug with JDateChooser throwing a NullPointerException when resetting to a null value
-Fixed a bug with JTableRowHeader shifting rows one pixel to the right with Java 1.4
-Modified DefaultRemoteTableModel and DefaultRemoteTreeTableModel to return a Boolean pending value for Boolean values.
-DefaultDatabaseTableDefinition now includes a method for adding independent column definitions
-DefaultDatabaseTableModel and DefaultPivotTableModel are now able to do joined queries
-DefaultPivotTableModel is now able to evaluate a complex aggregate function from the database
-Added a demo for the database components

29/3/2006 - version 3.0


This is a major update:
-added a groupable table header.
-fixed some bugs with FilterHeaderModel throwing a NullPointerException in some extreme cases.
-FilterTableHeader now extends GroupTableHeader.
-fixed a bug with OrTableFilter.
-added a factory for creating TableCellRenderers.
-added a TableCellRenderWrapper class for encapsulating a TableCellRenderer.
-fixed a bug with AdvancedJTable throwing an exception when stopping the edition of a cell in some cases.
-table assistant was modified to make it work with a GroupTableHeader: The column popup now includes only top level group columns.
-better designed and modified the com.sciapp.table.cache package
-added RemoteTableModel and RemoteTreeTableModel that asynchronously retrieve data from a CacheableTableModel and CacheableTreeTableModel respectively.
-added a PivotTableModel, which displays cross-tab (pivot) database queries.
-provided a better design for a TreeTable and a TreeTableModel. The new classes now reside in the com.sciapp.treetable package.
-implemented a basic database-enabled TreeTableModel that is able to display data from a database in a tree-like structure.

10/2/2006 - version 2.5


-Introduced a caching mechanism for TableModels (com.sciapp.table.cache).
-Created DatabaseTableModel for fetching data from a database (com.sciapp.table.db).
-Added ThreadedListTableModel which can be used to make a ListTableModel 'thread safe'.
-Added internationalization support through resource bundles (TableResourceManager).

3/2/2006 - version 2.4.1.1


-Fixed a bug with SortTableModel throwing an exception when the table model's data is cleared.
-Fixed a bug with SpanDrawer not drawing correctly the spanned branch nodes.

17/1/2006 - version 2.4.1


-Added a table cell editor that provides multiple possible values for a cell through a combo box.
-Added a progress bar table cell renderer.
-Added interface FilterListModel which all table models that filter the data of a table must implement.
-Made SortTableModel remember the original ordering of the row data, after a sort has taken place.
-Redesigned the com.sciapp.table.span package. A SpanDrawer object is now used to draw the spanned cells of the table, while a SpanModel defines which cells will be spanned.

8/12/2005 - version 2.4


-Added ability to merge/split cells.
-Added a row table header.
-Introduced style objects for easy cell rendering.
-Added filtering support for Double, Long and Float objects.

18/11/2005 - version 2.3


-AdvancedTableHeader now has a method for querying whether a column can be reordered (with the mouse).
-FilterHeaderModel now updates itself correctly when the data model of the associated table is changed. Also,
it does not throw an exception when null cell values are present in a column.
-exposed private methods sortData and filterData, of SortTableModel and FilterTableModel respectively, to the API.
-Included a method to make the first column of the table not movable.
-Introduced fading in popup menus.
-the date editor can now accept null values without throwing an exception.

27/10/2005 - version 2.2


-Improved the header-filter by adding a dynamic custom filter.

19/10/2005 - version 2.1


-Implemented excel-like filtering using the columns of the table's header.
-Incorporated the skinnable look-and-feel library by l2fprod.com

30/9/2005 - version 2.0


-Redesigned the com.sciapp.filter package.
-Greatly improved treetable component with multi-level trees, headers, footers and aggregate functions.
-Various improvements and optimizations.

16/6/2005 - version 1.1


First commercial version of the library.

Most important features:

-Multiple column sorting
-Row/column filtering
-Auto-adjustment of column widths
-Various visual enhancements
-Treetable component

14/2/2005 - version 1.0b


Beta version of the library.