void addSingleChoice(final String title, final String[] choices,
			final ChangeListener listener) {
		adjustColumnCount(choices.length + 1);
		for (int i = 0; i < choices.length; i++) {
			if (choices[i] == null) {
				choices[i] = "-- none --";
			}
			else if (choices[i].length() == 0) {
				choices[i] = "-- empty --";
			}
		}
		MyLabel titleComp = new MyLabel(title);
		MyRadioButton[] rb = new MyRadioButton[choices.length];
		final int row = rows.size();
		final ChoiceRow choiceRow = new ChoiceRow(titleComp, rb);
		ItemListener itemListener = e -> {
			adjustUseForAllEnablement();
			if (listener != null) {
				Object source = e.getSource();
				if (((MyRadioButton) source).isSelected()) {
					ResolveConflictChangeEvent re =
						new ResolveConflictChangeEvent(source, row, choiceRow.getChoice());
					listener.stateChanged(re);
				}
			}
		};
		ButtonGroup group = new ButtonGroup();
		for (int i = 0; i < choices.length; i++) {
			rb[i] = new MyRadioButton(choices[i]);
			rb[i].setName("ChoiceComponentRow" + row + "Col" + (i + 1));
			group.add(rb[i]);
			rb[i].addItemListener(itemListener);
		}
		if (choices.length > 0) {
			titleComp.setBorder(radioButtonBorder);
		}
		addRow(choiceRow);
		rowPanel.validate();
		validate();
		invalidate();
		adjustUseForAllEnablement();
	}
Adds radiobutton choices as a row of the table.
Radiobuttons allow you to select only one choice in the row.

@param title title that is placed at the beginning of the row
@param choices the text for each choice in the row
@param listener listener that gets notified whenever the state of 
one of the radiobuttons in this row changes.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/VariousChoicesPanel.java