private void createGUIComponents(final VisualizationViewer<V, E> viewer,
			SatelliteGraphViewer<V, E> satellite) {

		installCommonListeners(viewer, satellite);

		// add our panels...
		mainPanel = new JPanel(new BorderLayout());

		layeredPane = new JLayeredPane() {

			@Override
			public void setBounds(int x, int y, int width, int height) {
				super.setBounds(x, y, width, height);

				Rectangle bounds = primaryViewer.getBounds();
				Dimension parentSize = mainPanel.getSize();
				if (bounds.width == parentSize.width && bounds.height == parentSize.height) {
					return;
				}

				updateLayeredPaneComponentsForSizeChange();
			}
		};

		layeredPane.addComponentListener(new ComponentAdapter() {
			@Override
			public void componentResized(ComponentEvent e) {
				if (layeredPane.getSize().equals(lastSize)) {
					return;
				}

				updateLayeredPaneComponentsForSizeChange();
			}
		});

		layeredPane.setPreferredSize(new Dimension(400, 400));

		layeredPane.add(viewer, PRIMARY_VIEWER_LAYER);

		layeredPane.add(satellite, SATELLITE_VIEWER_LAYER);
		satellite.setDocked(true);

		mainPanel.add(layeredPane, BorderLayout.CENTER);

		satellite.setBorder(BorderFactory.createLineBorder(Colors.BORDER));

		undockedSatellitePanel = new JPanel(new BorderLayout());
		undockedSatellitePanel.addComponentListener(new ComponentAdapter() {
			@Override
			public void componentResized(ComponentEvent e) {
				if (isSatelliteUnDocked()) {
					VisualGraphViewUpdater<V, E> viewUpdater = getViewUpdater();
					viewUpdater.fitGraphToViewerLater(satelliteViewer);
				}
			}
		});

		showUndockedSatelliteButton = buildShowUndockedProviderButton();
		layeredPane.add(showUndockedSatelliteButton, SATELLITE_PROVIDER_BUTTON_LAYER);
	}
This is called to configure the satellite viewer's rendering settings.  Subclasses can
override this method to change, as needed.

@param viewer the new satellite viewer
@param layout the viewer's layout
Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/GraphComponent.java