protected void showPopup(JComponent comp, Field field, MouseEvent event,
			Rectangle fieldBounds) {
		lastField = field;

		if (!enabled) {
			return;
		}

		KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager();
		Window activeWindow = kfm.getActiveWindow();
		if (activeWindow == null) {
			activeWindow = JOptionPane.getRootFrame();
		}

		if (popupWindow != null) {
			popupWindow.dispose();
		}

		popupWindow = new PopupWindow(activeWindow, comp);
		popupWindow.setWindowName(windowName);
		popupWindow.setPopupPlacer(popupWindowPlacer);

		popupWindow.addComponentListener(new ComponentAdapter() {
			@Override
			public void componentShown(ComponentEvent e) {
				if (activeHoverService != null) {
					activeHoverService.componentShown();
				}
			}

			@Override
			public void componentHidden(ComponentEvent e) {
				if (activeHoverService != null) {
					activeHoverService.componentHidden();
				}
			}
		});

		boolean force = isForcePopups();
		boolean isToolTip = comp instanceof JToolTip;
		if (isToolTip) {
			popupWindow.showPopup(event, force);
		}
		else {

			// 
			// Make an area over which to show the popup.   The popup should not cover this area.
			// The field that is hovered may be too big to be this area, as a big field may cause 
			// the popup to be too far away from the cursor.
			//
			// Use the mouse point and then create an area (based on trial-and-error) that should
			// not be occluded. 
			// 
			int horizontalPad = 100;
			int verticalPad = 50;
			Rectangle keepVisibleArea = new Rectangle(event.getPoint());
			keepVisibleArea.grow(horizontalPad, verticalPad);

			popupWindow.showOffsetPopup(event, keepVisibleArea, force);
		}
	}
Sets the object that decides where to place the popup window. 
@param popupWindowPlacer the placer
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/hover/AbstractHoverProvider.java