private void create() {

		formatMgr = new FormatManager(getDisplayOptions(), getFieldOptions());
		multiModel = new MultiListingLayoutModel(formatMgr,
			new Program[] { latestProgram, myProgram }, latestProgram.getMemory());

		latestPanel = new ListingPanel(formatMgr, new EmptyListingModel()) {
			@Override
			protected ListingModel createListingModel(Program program) {
				if (program == null) {
					return null;
				}

				if (showListingPanel) {
					return multiModel.getAlignedModel(0);
				}
				return new EmptyListingModel();
			}
		};

		myPanel = new ListingPanel(formatMgr, new EmptyListingModel()) {
			@Override
			protected ListingModel createListingModel(Program program) {
				if (program == null) {
					return null;
				}

				if (showListingPanel) {
					return multiModel.getAlignedModel(1);
				}
				return new EmptyListingModel();
			}
		};

		latestPanel.setProgram(latestProgram);
		myPanel.setProgram(myProgram);

		new FieldPanelCoordinator(
			new FieldPanel[] { latestPanel.getFieldPanel(), myPanel.getFieldPanel() });

		buttonGroup = new ButtonGroup();
		ItemListener listener = e -> {
			if (e.getStateChange() == ItemEvent.SELECTED) {
				mergeManager.clearStatusText();
				mergeManager.setApplyEnabled(true);
			}
		};

		keepLatestRB = new GRadioButton(MergeConstants.LATEST_TITLE);
		keepLatestRB.setName(KEEP_LATEST_BUTTON_NAME);
		keepLatestRB.addItemListener(listener);

		keepMyRB = new GRadioButton(MergeConstants.MY_TITLE);
		keepMyRB.setName(KEEP_MY_BUTTON_NAME);
		keepMyRB.addItemListener(listener);

		keepBothRB = new GRadioButton("Both");
		keepBothRB.setName(KEEP_BOTH_BUTTON_NAME);
		keepBothRB.addItemListener(listener);

		mergeBothRB = new GRadioButton("Merge");
		mergeBothRB.setName(MERGE_BOTH_BUTTON_NAME);
		mergeBothRB.addItemListener(listener);

		buttonGroup.add(keepLatestRB);
		buttonGroup.add(keepMyRB);
		buttonGroup.add(keepBothRB);
		buttonGroup.add(mergeBothRB);

		setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

		countPanel = new ConflictCountPanel();

		JPanel centerPanel = new JPanel(new BorderLayout());
		latestTitlePanel = new TitledPanel(MergeConstants.LATEST_TITLE, latestPanel, 5);
		myTitlePanel = new TitledPanel(MergeConstants.MY_TITLE, myPanel, 5);

		latestTitlePanel.addTitleComponent(new ShowHeaderButton());
		myTitlePanel.addTitleComponent(new GIconLabel(new EmptyIcon(22, 22)));

		JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
		splitPane.setResizeWeight(0.5);
		splitPane.setDividerSize(4);
		splitPane.setBorder(BorderFactory.createEmptyBorder());
		splitPane.setLeftComponent(latestTitlePanel);
		splitPane.setRightComponent(myTitlePanel);
		centerPanel.add(splitPane, BorderLayout.CENTER);

		setLayout(new BorderLayout());
		add(countPanel, BorderLayout.NORTH);
		add(centerPanel, BorderLayout.CENTER);
	}
Panel to select a data type in order to resolve an add conflict in the multi-user
external location merger.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalAddConflictPanel.java