protected VisualizationViewer<AttributedVertex, AttributedEdge> createViewer() {
		VisualizationViewer<AttributedVertex, AttributedEdge> vv =
			VisualizationViewer.<AttributedVertex, AttributedEdge> builder()
					.multiSelectionStrategySupplier(
						() -> freeFormSelection ? MultiSelectionStrategy.arbitrary()
								: MultiSelectionStrategy.rectangular())
					.viewSize(PREFERRED_VIEW_SIZE)
					.layoutSize(PREFERRED_LAYOUT_SIZE)
					.build();

		// Add an ancestor listener to scale and center the graph after the component
		// has been initially shown.
		vv.getComponent().addAncestorListener(new AncestorListener() {

			@Override
			public void ancestorAdded(AncestorEvent ancestorEvent) {
				vv.getComponent().removeAncestorListener(this);
				Swing.runLater(() -> {
					centerAndScale();
				});
			}

			@Override
			public void ancestorRemoved(AncestorEvent ancestorEvent) {
				// do nothing
			}

			@Override
			public void ancestorMoved(AncestorEvent ancestorEvent) {
				// do nothing
			}
		});

		// We control tooltips with the PopupRegulator.  Use null values to disable the default
		// tool tip mechanism
		vv.setVertexToolTipFunction(v -> null);
		vv.setEdgeToolTipFunction(e -> null);
		vv.setToolTipText(null);

		PopupSource<AttributedVertex, AttributedEdge> popupSource = new GraphDisplayPopupSource(vv);
		popupRegulator = new PopupRegulator<>(popupSource);

		RenderContext<AttributedVertex, AttributedEdge> renderContext = vv.getRenderContext();

		renderContext.getSelectedVertexState().addItemListener(item -> {
			renderContext.getSelectedEdgeState().clear();
			selectEdgesConnecting(renderContext.getSelectedVertexState().getSelected());
		});

		graphRenderer.initializeViewer(vv);

		vv.getComponent().requestFocus();
		vv.setBackground(BACKGROUND_COLOR);
		MouseListener[] mouseListeners = vv.getComponent().getMouseListeners();
		for (MouseListener mouseListener : mouseListeners) {
			vv.getComponent().removeMouseListener(mouseListener);
		}

		graphMouse = new JgtGraphMouse(this, false);
		vv.setGraphMouse(graphMouse);

		return vv;
	}
Create and return a {@link VisualizationViewer} to display graphs
@return the new VisualizationViewer
Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/DefaultGraphDisplay.java