@Override
	JComponent getComponent() {

		if (isDisposed) {
			throw new AssertException("Attempted to reuse a disposed component window node");
		}

		if (!invalid) {
			return comp;
		}

		if (comp instanceof JTabbedPane) {
			comp.removeAll();
		}
		comp = null;

		List<ComponentPlaceholder> activeComponents = new ArrayList<>();
		populateActiveComponents(activeComponents);
		int count = activeComponents.size();
		if (count == 1) {

			//
			// TODO Hack Alert!  (When this is removed, also update ComponentPlaceholder)
			// 
			ComponentPlaceholder nextTop = activeComponents.get(0);
			if (nextTop.isDisposed()) {
				// This should not happen!  We have seen this bug recently
				Msg.debug(this, "Found disposed component that was not removed from the active " +
					"list: " + nextTop, ReflectionUtilities.createJavaFilteredThrowable());
				return null;
			}

			top = activeComponents.get(0);
			comp = top.getComponent();
			comp.setBorder(BorderFactory.createRaisedBevelBorder());

			installRenameMenu(top, null);
		}
		else if (count > 1) {
			JTabbedPane tabbedPane =
				new JTabbedPane(SwingConstants.BOTTOM, JTabbedPane.SCROLL_TAB_LAYOUT);
			setupFocusUpdateListeners(tabbedPane);
			comp = tabbedPane;

			int activeIndex = addComponentsToTabbedPane(activeComponents, tabbedPane);

			DockableComponent activeComp =
				(DockableComponent) tabbedPane.getComponentAt(activeIndex);
			top = activeComp.getComponentWindowingPlaceholder();
			tabbedPane.setSelectedComponent(activeComp);
		}
		invalid = false;
		return comp;
	}
Removes the component from this node (and the manager), but possibly keeps an empty object as
a placeholder.
@param placeholder the placeholder object to be removed.
@param keepEmptyPlaceholder flag indicating to keep a placeholder object.
Ghidra/Framework/Docking/src/main/java/docking/ComponentNode.java