void update() {
		if (!invalid) {
			return;
		}

		if (childComp != null) {
			getContentPane().remove(childComp);
		}
		childComp = child.getComponent();
		if (childComp != null) {
			if (window == null) {
				createWindow(childComp);
			}
			else {
				getContentPane().add(childComp, BorderLayout.CENTER);
				window.validate();
				window.repaint();
			}
		}
		else if (window != null) {
			bounds = window.getBounds();
			window.setVisible(false);
			window.dispose();
			window = null;
		}
		invalid = false;
		updateTitle();
		clearContextTypes();
		((RootNode) parent).notifyWindowChanged(this);
	}
rebuilds the component tree if needed.
Ghidra/Framework/Docking/src/main/java/docking/DetachedWindowNode.java