private void createActions() {
		// we don't automatically refresh the list of components in a window if it changes
		DockingAction refreshAction =
			new ActionBuilder("Refresh", ACTION_OWNER).toolBarIcon(Icons.REFRESH_ICON)
					.onAction(c -> refreshModelData())
					.build();
		addAction(refreshAction);

		// this action also just calls the refreshModelData() method, but since it is a toggle
		// action, the refresh model data will rebuild with the filter option toggled.
		filterAction =
			new ToggleActionBuilder("Filter", ACTION_OWNER).toolBarIcon(Icons.CONFIGURE_FILTER_ICON)
					.description("Filters out most non-focusable components")
					.onAction(c -> refreshModelData())
					.selected(true)
					.build();
		addAction(filterAction);

		eventAction =
			new ToggleActionBuilder("Show Events", ACTION_OWNER).toolBarIcon(Icons.INFO_ICON)
					.description("Shows focus events")
					.onAction(c -> toggleShowEvents())
					.build();
		addAction(eventAction);

		toggleFollowFocusAction = new ToggleActionBuilder("Follow Focus", ACTION_OWNER)
				.toolBarIcon(Icons.NAVIGATE_ON_INCOMING_EVENT_ICON)
				.description("On causes component table to constant repopulate as focus changes")
				.onAction(c -> toggleFollowFocus())
				.selected(true)
				.build();
		addAction(toggleFollowFocusAction);
	}
Diagnostic dialog for display information about the components in a window and related focus
information.
Ghidra/Framework/Docking/src/main/java/ghidra/docking/util/ComponentInfoDialog.java