changeset 1191:ced2772737ea

RT-20300: TableView is not refreshed when TableColumn are added dynamically
author jgiles
date Wed, 30 May 2012 10:51:16 +1200
parents 3275052b54fa
children 3009735752fb
files javafx-ui-controls/src/com/sun/javafx/scene/control/skin/NestedTableColumnHeader.java javafx-ui-controls/src/javafx/scene/control/TableView.java
diffstat 2 files changed, 16 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/NestedTableColumnHeader.java	Tue May 29 16:40:14 2012 +1200
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/NestedTableColumnHeader.java	Wed May 30 10:51:16 2012 +1200
@@ -59,21 +59,21 @@
      *                                                                         *
      **************************************************************************/
     
-    public NestedTableColumnHeader(TableView table, TableColumn tc) {
+    NestedTableColumnHeader(TableView table, TableColumn tc) {
         super(table, tc);
 
         getStyleClass().setAll("nested-column-header");
         setFocusTraversable(false);
 
         initUI();
-
+        
         // watching for changes to the view columns in either table or tableColumn.
         if (getTableColumn() == null && getTableView() != null) {
             setColumns(getTableView().getColumns());
         } else if (getTableColumn() != null) {
             setColumns(getTableColumn().getColumns());
         }
-        getColumns().addListener(weakColumnsListener);
+//        getColumns().addListener(weakColumnsListener);
     }
     
     
@@ -136,10 +136,18 @@
      * It does NOT include ANY of the children of these columns, if any exist.
      */
     private ObservableList<? extends TableColumn> columns;
-    public ObservableList<? extends TableColumn> getColumns() { return columns; }
-    public void setColumns(ObservableList<? extends TableColumn> newColumns) {
+    ObservableList<? extends TableColumn> getColumns() { return columns; }
+    void setColumns(ObservableList<? extends TableColumn> newColumns) {
+        if (this.columns != null) {
+            this.columns.removeListener(weakColumnsListener);
+        }
+        
         this.columns = newColumns;  
         
+        if (this.columns != null) {
+            this.columns.addListener(weakColumnsListener);
+        }
+        
         // update the column headers....
         
         // iterate through all current headers, telling them to clean up
--- a/javafx-ui-controls/src/javafx/scene/control/TableView.java	Tue May 29 16:40:14 2012 +1200
+++ b/javafx-ui-controls/src/javafx/scene/control/TableView.java	Wed May 30 10:51:16 2012 +1200
@@ -679,9 +679,6 @@
                     // set up listeners
                     removeTableColumnListener(c.getRemoved());
                     addTableColumnListener(c.getAddedSubList());
-
-                    removeColumnsListener(c.getRemoved(), weakColumnsObserver);
-                    addColumnsListener(c.getAddedSubList(), weakColumnsObserver);
                 }
                     
                 // We don't maintain a bind for leafColumns, we simply call this update
@@ -762,6 +759,9 @@
             // Fix for RT-15194: Need to remove removed columns from the 
             // sortOrder list.
             while (c.next()) {
+                removeColumnsListener(c.getRemoved(), weakColumnsObserver);
+                addColumnsListener(c.getAddedSubList(), weakColumnsObserver);
+                
                 if (c.wasRemoved()) {
                     for (int i = 0; i < c.getRemovedSize(); i++) {
                         getSortOrder().remove(c.getRemoved().get(i));