What is the best way to support two views over the same data, with both views allowing edits on the data, in presence of various listeners in the UI and the underlying model.
Example, simple approach is to bind JTable with an AbstractTableModel instance, and pass reference of AbstractTableModel instance to the other view as well.
But if the other view chooses to change the underlying abstract table model instance, and in presence of some other listeners, like table model listener and some listeners on the JTable, it gets complicated very quickly, at least for me.
Not entirely sure, but it should be possible for some combination of these objects to lead to events being raised inadvertently.
I am not aware of any patterns in swing that can help with this problem, but apparently MVC is not encouraged in Swing.
In the past, I would have chosen to ensure that only the model raises events, and that changes the view, called the passive view pattern.
Your thoughts? (Swing and application design newbie here.)
You can totally deviate from the listening scheme and switch to an EventBus based scheme, I don’t think it is hard to replicate in a Swing framework. It’s a concept from the GWT framework. Your application should initialize an event bus and its reference must be passed to those “objects” which need to broadcast events. It should be a “singleton” class that passes around the same instance of the EventBus.
So the data modifiers in your model can “post” an event into the eventbus and any UI can wish to receive the broadcast. So a change in the model by one of your tables will broadcast an “update” event which is received by your other table, which inturn updates its display.
Design your callbacks well from the idea and you should be having a very simple and clean solution.