The Homework refers to JListModel when this should just be ListModel.
I tried to cut down the assignment, but left in something: The homework requires that you handle double-clicks on the room dialog to bring up a dialog. Just ignore this.
This dialog may appear as part of Homework #6, so if you have already done them, don't be dismayed.
CollectionListModel will handle sorted collections of comparable items. So reservationAdded or its generalization will need to use binary search to find out where the item was added. See Collections.binarySearch.
As it happens ReservationsPanel can also be generalized to take a type parameter (which makes the new Rooms frame easier to write) if you add a new interface ObservableCollection<T> that inherits from Collection<T> and provides the ability to add and remove observers. The generic classes should be placed in the util package.
If a type parameter T needs to be Comparable, you declare it in the class header as T extends Comparable<T>. This looks strangely recursive, but is perfectly legal.
Q: Do I need to create a Rooms class so that it can be an ObservableCollection?
A: It is recommended to get an observable collection of rooms, but this can be done without creating a Rooms class. Instead you can ADAPT the values of the Room map so that if observers are added or removed, they act upon a (private) static field of class Room. Delegation can solve many problems!
Q: The File>New menu item requires we remove all rooms, but Room.allRooms() returns an unmodifiable collection. How can we implement the File>New functionality
A: Write a new static method in Room.