@Override
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		if (rowIndex >= list.size()) {
			return;
		}

		BatchGroup row = list.get(rowIndex);
		switch (COLS.getCol(columnIndex)) {
			case SELECTED:
				boolean newValue = (Boolean) aValue;
				// dont allow enable unless there is a lang chosen
				if (newValue == true && row.getSelectedBatchGroupLoadSpec() == null) {
					Msg.showWarn(this, null, "Missing language",
						"Select a language for this group before enabling");
					return;
				}

				row.setEnabled(newValue);
				break;
			case LANG:
				row.setSelectedBatchGroupLoadSpec((BatchGroupLoadSpec) aValue);
				break;
			case FILES:
				// ignore
				break;
			default:
				throw new RuntimeException("bad column");
		}
	}
An adapter between {@link BatchInfo} and a {@link TableModel}.
Ghidra/Features/Base/src/main/java/ghidra/plugins/importer/batch/BatchImportTableModel.java