# tableChanged Methode - AbstractTableModel



## Nico22333 (4. Nov 2011)

Hey @ all, 

Ich habe ein Problem bezüglich der tableChanged Methode. Und zwar habe ich eine vom AbstractTableModel abgeleitete selbst erstelltes TableModel. In meinem "Controller" habe ich dann zwei Instanzen von den Model erstellt und jeweils einem JTable übergeben und natürlich jeweils einen TableModelListener angemeldet. Soweit so gut. Nun habe ich die Methode tableChanged im Controller implementiert. Jetzt zum Problem: Wie unterscheide ich in der tableChangedMethode welche Tabelle ich gerade benutze. Wenn ich den Code für lediglich eine Tabelle in der Methode implementiere funktioniert alles. Implementiere ich den Code der zweiten Tabelle darin kommt es zu erheblichen Problemen...
an der "ChecklistTableModel"-Klasse kann es eigentlich nicht liegen, da es ja prinzipiel funktioniert!


```
//Erstellung der TableModel im Controller
private ChecklistTableModel tableModel = ChecklistTableModel.getInstance();
private ChecklistTableModel templateTableModel = ChecklistTableModel.getInstance(); 

//Anmeldung der Listener im Controller
tableModel.addTableModelListener(this);
templateTableModel.addTableModelListener(this);

//Übergabe der TableModel an die JTables der Frames
useChecklistFrame.getTable().setModel(useTableModel);
templatesFrame.getTable().setModel(templateTableModel);

//Ausschnitt aus tableChanged Methode
public void tableChanged(TableModelEvent e) 
	{
		int row = e.getFirstRow();
		int column = 1;

		TableModel model = (TableModel)e.getSource();

		if(e.getType()== TableModelEvent.UPDATE)
		{
			String columnName = tableModel.getColumnName(column);
			Object rows = tableModel.getValueAt(row, column); 

			int newCount = (Integer)rows;
			String itemName = (String)tableModel.getValueAt(row, 0);
			String checklistName =  (String)actualChecklist.getActualChecklistCombo().getSelectedItem();
			
			
			actualChecklistDAO_DB.updateCount(checklistName, itemName, newCount);
			
			tableModel.removeAll();
			
			item = actualChecklistDAO_DB.getChecklistItems(checklistName);
			for(int i=0; i<item.size();++i)
			{
				String name = item.elementAt(i).getName();
				int count = item.elementAt(i).getCount(); 
				tableModel.addRow(name, count);
			}
		}
```

der Code der tableChanged Methode ist eigentlich weitgehend irrelevant. Ich würde nur gerne Wissen, wie ich eine Fallunterscheidung darin einbringen kann, sprich: Wenn "tableModel" dann mach das, wenn "templateTableModel" dann mach das Andere...!!!

Ich hoffe, dass ich nicht all zu verwirrend!
Vielen Dank im Voraus!


----------



## Marco13 (4. Nov 2011)

Irgendwas hab' ich wohl übersehen...

```
TableModel model = (TableModel)e.getSource();
        if (model == dasEine) machDies(); 
        else machDas();
```

Aber zwei Models die sich gegenseitig benachrichtigen und Änderungen im jeweils anderen verursachen könnten sich ins Gehege kommen - das musst du dir überlegen...


----------



## bERt0r (5. Nov 2011)

Sieht aus wie ein klassischer Fall von Sinn von MVC nicht verstanden. 2 Identische Models für 2 verschiedene Tables, und jetzt willst du sie synchronisieren, so versteh ich das. Warum nimmst du nicht gleich nur eine Model?

Um deine Frage zu beantworten: EventObjects haben die Funktion getSource(), mit der solltest du überprüfen können von wo es herkommt.


----------

