private GTable buildMatchingStructuresTable() {
		structureTableModel = new StructureTableModel();
		matchingStructuresTable = new GhidraTable(structureTableModel);
		matchingStructuresTable.setAutoLookupColumn(0);
		matchingStructuresTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

		matchingStructuresTable.setAutoCreateColumnsFromModel(false);
		matchingStructuresTable.setPreferredScrollableViewportSize(new Dimension(200, 100));

		TableCellRenderer cellRenderer = new StructureCellRenderer();
		TableColumnModel columnModel = matchingStructuresTable.getColumnModel();
		for (int i = 0; i < columnModel.getColumnCount(); i++) {
			TableColumn column = columnModel.getColumn(i);
			column.setCellRenderer(cellRenderer);
		}

		ListSelectionModel lsm = matchingStructuresTable.getSelectionModel();
		lsm.addListSelectionListener(e -> {
			if (e.getValueIsAdjusting()) {
				return;
			}

			ListSelectionModel selectionModel = (ListSelectionModel) e.getSource();
			if (selectionModel != null && !selectionModel.isSelectionEmpty()) {
				// Show the user that the structure choice is now coming from the table
				useExistingStructButton.setSelected(true);
			}

			updateEnablement();
		});

		matchingStructuresTable.getAccessibleContext().setAccessibleName("Matching Structures");
		return matchingStructuresTable;
	}
Creates a new dialog with the given parent.

@param tool The current tool that this dialog needs to access services.
@param program the current program
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/data/CreateStructureDialog.java