public int findRowByPartialText(final JTable table, final String searchString) {
		waitForTable(table);

		final AtomicReference<Integer> result = new AtomicReference<>();
		runSwing(() -> {
			TableModel model = table.getModel();
			int rowCount = model.getRowCount();
			int columnCount = model.getColumnCount();
			StringBuilder buffy = new StringBuilder();

			for (int row = 0; row < rowCount; row++) {
				buffy.delete(0, buffy.length());// clear and reuse

				for (int col = 0; col < columnCount; col++) {
					Object value = model.getValueAt(row, col);
					if (value == null) {
						continue;
					}

					String string = value.toString();
					buffy.append(string);
				}

				String rowString = buffy.toString();
				if (rowString.contains(searchString)) {
					result.set(row);
					return;
				}
			}
		});

		if (result.get() == null) {
			throw new AssertException("Unable to find row with text: " + searchString);
		}

		waitForTable(table);

		return result.get();
	}
Captures the window, including decorations. This will use a {@link Robot} to create a screen
capture, which has the effect of getting all items within the window bounds. This method is
needed if you wish to capture child windows, like popups/hovers.

<P>
Other capture methods will not use the screen capture mechanism, but rather will directly
render the given component. In this case, subordinate windows will not be captured. For
example, see {@link #captureProvider(Class)}.

@param provider the provider's name
@param width the desired width
@param height the desired height
Ghidra/Features/Base/src/main/java/help/screenshot/AbstractScreenShotGenerator.java