--- old/modules/javafx.controls/src/main/java/javafx/scene/control/skin/NestedTableColumnHeader.java 2016-09-27 17:05:30.000000000 +1300 +++ new/modules/javafx.controls/src/main/java/javafx/scene/control/skin/NestedTableColumnHeader.java 2016-09-27 17:05:30.000000000 +1300 @@ -114,17 +114,16 @@ * Creates a new NestedTableColumnHeader instance to visually represent the given * {@link TableColumnBase} instance. * - * @param skin The skin used by the UI control. * @param tc The table column to be visually represented by this instance. */ - public NestedTableColumnHeader(final TableViewSkinBase skin, final TableColumnBase tc) { - super(skin, tc); + public NestedTableColumnHeader(final TableColumnBase tc) { + super(tc); getStyleClass().setAll(DEFAULT_STYLE_CLASS); setFocusTraversable(false); // init UI - label = new TableColumnHeader(skin, getTableColumn()); + label = new TableColumnHeader(getTableColumn()); label.setTableHeaderRow(getTableHeaderRow()); label.setParentHeader(getParentHeader()); label.setNestedColumnHeader(this); @@ -133,8 +132,6 @@ changeListenerHandler.registerChangeListener(getTableColumn().textProperty(), e -> label.setVisible(getTableColumn().getText() != null && ! getTableColumn().getText().isEmpty())); } - - changeListenerHandler.registerChangeListener(TableSkinUtils.columnResizePolicyProperty(skin), e -> updateContent()); } @@ -169,7 +166,7 @@ if (me.getClickCount() == 2 && me.isPrimaryButtonDown()) { // the user wants to resize the column such that its // width is equal to the widest element in the column - TableSkinUtils.resizeColumnToFitContent(header.getTableViewSkin(), column, -1); + TableSkinUtils.resizeColumnToFitContent(header.getTableSkin(), column, -1); } else { // rather than refer to the rect variable, we just grab // it from the source to prevent a small memory leak. @@ -367,8 +364,8 @@ */ protected TableColumnHeader createTableColumnHeader(TableColumnBase col) { return col.getColumns().isEmpty() ? - new TableColumnHeader(getTableViewSkin(), col) : - new NestedTableColumnHeader(getTableViewSkin(), col); + new TableColumnHeader(col) : + new NestedTableColumnHeader(col); } @@ -382,6 +379,11 @@ @Override void setTableHeaderRow(TableHeaderRow header) { super.setTableHeaderRow(header); + // it's only now that a skin might be available + if (getTableSkin() != null) { + changeListenerHandler.registerChangeListener(TableSkinUtils.columnResizePolicyProperty(getTableSkin()), e -> updateContent()); + } + label.setTableHeaderRow(header); // tell all children columns what TableHeader they belong to @@ -413,8 +415,8 @@ void updateTableColumnHeaders() { // watching for changes to the view columns in either table or tableColumn. - if (getTableColumn() == null && getTableViewSkin() != null) { - setColumns(TableSkinUtils.getColumns(getTableViewSkin())); + if (getTableColumn() == null && getTableSkin() != null) { + setColumns(TableSkinUtils.getColumns(getTableSkin())); } else if (getTableColumn() != null) { setColumns(getTableColumn().getColumns()); } @@ -571,20 +573,19 @@ return; } - final TableViewSkinBase skin = getTableViewSkin(); - boolean isConstrainedResize = false; - Callback columnResizePolicy = TableSkinUtils.columnResizePolicyProperty(skin).get(); + TableViewSkinBase tableSkin = getTableSkin(); + Callback columnResizePolicy = TableSkinUtils.columnResizePolicyProperty(tableSkin).get(); if (columnResizePolicy != null) { isConstrainedResize = - skin instanceof TableViewSkin ? TableView.CONSTRAINED_RESIZE_POLICY.equals(columnResizePolicy) : - skin instanceof TreeTableViewSkin ? TreeTableView.CONSTRAINED_RESIZE_POLICY.equals(columnResizePolicy) : + tableSkin instanceof TableViewSkin ? TableView.CONSTRAINED_RESIZE_POLICY.equals(columnResizePolicy) : + tableSkin instanceof TreeTableViewSkin ? TreeTableView.CONSTRAINED_RESIZE_POLICY.equals(columnResizePolicy) : false; } // RT-32547 - don't show resize cursor when in constrained resize mode // and there is only one column - if (isConstrainedResize && TableSkinUtils.getVisibleLeafColumns(skin).size() == 1) { + if (isConstrainedResize && TableSkinUtils.getVisibleLeafColumns(tableSkin).size() == 1) { return; } @@ -651,7 +652,7 @@ draggedX = -draggedX; } double delta = draggedX - lastX; - boolean allowed = TableSkinUtils.resizeColumn(getTableViewSkin(), col, delta); + boolean allowed = TableSkinUtils.resizeColumn(getTableSkin(), col, delta); if (allowed) { lastX = draggedX; }