This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
Add ListSelectionListeners to the JTables through the object returned by getSelectionModel(). When a row is selected in one table you are then notified, and you can clear the selection in the second, and vice versa.
I've done a bit of investigation, and the problem is that clearing the selection also triggers an event. So when you select something in the second table the following events are triggered:
1) selection of data in table 2, with getValueIsAdjusting() returning true
2) de-selection of data in table 1, with getValueIsAdjusting() returning false; this event is caused by the previous one
3) de-selection of data in table 2, with getValueIsAdjusting() returning true; this event is caused by the previous one
4) selection of data in table 2, with getValueIsAdjusting() returning false; this event matches the first event
The problem here is that event 2 triggers another event, clearing the selection of table 2. You will need to block this event somehow. I usually use a simple boolean for this. In a short hack based on your code (stripped from the renderers):