--- old/modules/javafx.controls/src/main/java/javafx/scene/control/skin/TabPaneSkin.java 2018-01-05 12:34:40.172926000 +0530 +++ new/modules/javafx.controls/src/main/java/javafx/scene/control/skin/TabPaneSkin.java 2018-01-05 12:34:39.880926000 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -477,24 +477,6 @@ tabRegion.removeListeners(tab); removeTabContent(tab); - // remove the menu item from the popup menu - ContextMenu popupMenu = tabHeaderArea.controlButtons.popup; - TabMenuItem tabItem = null; - if (popupMenu != null) { - for (MenuItem item : popupMenu.getItems()) { - tabItem = (TabMenuItem) item; - if (tab == tabItem.getTab()) { - break; - } - tabItem = null; - } - } - if (tabItem != null) { - tabItem.dispose(); - popupMenu.getItems().remove(tabItem); - } - // end of removing menu item - EventHandler cleanup = ae -> { tabRegion.animationState = TabAnimationState.NONE; @@ -1848,7 +1830,7 @@ showControlButtons = true; } else { setVisible(false); - popup.getItems().clear(); + clearPopupMenu(); popup = null; } @@ -1862,7 +1844,7 @@ if (popup == null) { popup = new ContextMenu(); } - popup.getItems().clear(); + clearPopupMenu(); ToggleGroup group = new ToggleGroup(); ObservableList menuitems = FXCollections.observableArrayList(); for (final Tab tab : getSkinnable().getTabs()) { @@ -1874,6 +1856,13 @@ popup.getItems().addAll(menuitems); } + private void clearPopupMenu() { + for (MenuItem item : popup.getItems()) { + ((TabMenuItem) item).dispose(); + } + popup.getItems().clear(); + } + private void showPopupMenu() { for (MenuItem mi: popup.getItems()) { TabMenuItem tmi = (TabMenuItem)mi; @@ -1911,7 +1900,9 @@ } public void dispose() { + textProperty().unbind(); tab.disableProperty().removeListener(weakDisableListener); + tab = null; } }