--- old/modules/javafx.controls/src/main/java/javafx/scene/control/skin/NestedTableColumnHeader.java 2016-09-29 09:31:49.000000000 +1300 +++ new/modules/javafx.controls/src/main/java/javafx/scene/control/skin/NestedTableColumnHeader.java 2016-09-29 09:31:48.000000000 +1300 @@ -122,7 +122,7 @@ setFocusTraversable(false); // init UI - label = new TableColumnHeader(skin, getTableColumn()); + label = createTableColumnHeader(getTableColumn()); label.setTableHeaderRow(getTableHeaderRow()); label.setParentHeader(getParentHeader()); label.setNestedColumnHeader(this); @@ -356,15 +356,24 @@ } /** - * Creates a new TableColumnHeader instance for the given TableColumnBase instance. By default this method should - * not be overridden, but in some circumstances it makes sense (e.g. testing, or when extreme customization is desired). - * If the given TableColumnBase instance has child columns, then it is suggested to return a - * {@link NestedTableColumnHeader} instance instead. + * Creates a new TableColumnHeader instance for the given TableColumnBase instance. The general pattern for + * implementing this method is as follows: + * + * + * + * Note: In most circumstances this method should not be overridden, but in some circumstances it + * makes sense (e.g. testing, or when extreme customization is desired). * * @return A new TableColumnHeader instance. */ protected TableColumnHeader createTableColumnHeader(TableColumnBase col) { - return col.getColumns().isEmpty() ? + return col == null || col.getColumns().isEmpty() || col == getTableColumn() ? new TableColumnHeader(getTableViewSkin(), col) : new NestedTableColumnHeader(getTableViewSkin(), col); }