@Override
	public void domainObjectChanged(DomainObjectChangedEvent ev) {

		if (ev.contains(RESTORED, MEMORY_BLOCK_MOVED, MEMORY_BLOCK_REMOVED, DATA_TYPE_CHANGED)) {
			markDataAsStale();
			return;
		}

		for (int i = 0; i < ev.numRecords(); ++i) {

			DomainObjectChangeRecord doRecord = ev.getChangeRecord(i);
			Object newValue = doRecord.getNewValue();
			EventType eventType = doRecord.getEventType();
			if (eventType instanceof ProgramEvent type) {
				switch (type) {
					case CODE_REMOVED:
						ProgramChangeRecord pcRec = (ProgramChangeRecord) doRecord;
						provider.remove(pcRec.getStart(), pcRec.getEnd());
						break;
					case CODE_ADDED:
						if (newValue instanceof Data) {
							provider.add((Data) newValue);
						}
						break;
					default:
						//Msg.info(this, "Unhandled event type: " + doRecord.getEventType());
						break;
				}
			}
		}

		if (ev.contains(ProgramEvent.DATA_TYPE_SETTING_CHANGED)) {
			// Unusual code: because the table model goes directly to the settings values
			// during each repaint, we don't need to figure out which row was changed.
			provider.getComponent().repaint();
		}
	}
Plugin that provides the "Defined Strings" table, where all the currently defined
string data in the program is listed.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/strings/ViewStringsPlugin.java