private void create(List<DataTypeSyncInfo> list, Set<DataTypeSyncInfo> preselectedInfos) {
		// Populate the table model.
		tableModel = new DataTypeSyncTableModel(list, preselectedInfos, true);

		syncTable = new GhidraTable(tableModel);
		syncTable.setDefaultRenderer(Boolean.class, new DataTypeSyncBooleanRenderer());
		syncTable.getAccessibleContext().setAccessibleName("Sync");
		JScrollPane sp = new JScrollPane(syncTable);
		sp.getAccessibleContext().setAccessibleName("Sync Scroll");

		Dimension d = new Dimension(940, 200);
		syncTable.setPreferredScrollableViewportSize(d);
		syncTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		tableFilterPanel = new GhidraTableFilterPanel<>(syncTable, tableModel);
		tableFilterPanel.getAccessibleContext().setAccessibleName("Table Filter");
		add(sp, BorderLayout.CENTER);
		add(tableFilterPanel, BorderLayout.SOUTH);
		tableModel.fireTableDataChanged();

		TableColumnModel columnModel = syncTable.getColumnModel();

		// Set default column sizes
		for (int i = 0; i < columnModel.getColumnCount(); i++) {
			TableColumn column = columnModel.getColumn(i);
			int modelIndex = column.getModelIndex();
			switch (modelIndex) {
				case DataTypeSyncTableModel.CHECKED_COL:
					column.setPreferredWidth(60);
					column.setMinWidth(60);
					column.setMaxWidth(60);
					column.setResizable(false);
					break;
				case DataTypeSyncTableModel.STATUS_COL:
					column.setPreferredWidth(70);
					column.setMinWidth(70);
					column.setMaxWidth(70);
					column.setResizable(false);
					break;
				case DataTypeSyncTableModel.REF_PATH_COL:
					column.setPreferredWidth(200);
					break;
				case DataTypeSyncTableModel.CHANGE_TIME_COL:
				case DataTypeSyncTableModel.NAME_COL:
					column.setPreferredWidth(140);
					break;
			}
		}

		// Set up notifier of selected row changing.
		ListSelectionModel selectionModel = syncTable.getSelectionModel();
		selectionModel.addListSelectionListener(e -> {
			int selectedIndex = tableFilterPanel.getModelRow(syncTable.getSelectedRow());
			if (selectedIndex >= 0) {
				listener.dataTypeSelected(tableModel.getSyncInfo(selectedIndex));
			}
			else {
				listener.dataTypeSelected(null);
			}
		});
	}
Construct a new data type synchronization table panel. 
@param list list of LabelHistory objects
@param listener listener that is notified when the user changes the selected
row in the table.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypeSyncPanel.java