You say the application loads the categories at startup. In this case you don't need listeners, just do what you have now.
The most important part of MVC is that your business logic layer does not know about your presentation layer. In the most loosely coupled scenario, your presentation layer also doesn't know about your business logic layer, and controllers just hand them buckets of data with which to construct the view (these buckets are called "view models"). How far
you should separate these layers depends on the complexity of your application. In small applications it's not a big deal to have the view use business objects rather than view models.
Note that you don't have to use observers to achieve MVC in Swing. Only if your business layer operates independently from your controllers (for instance, when it's some sort of simulation running its own threads). Otherwise, your controller can operate on the business layer, after which it tells the view which parts to update. In Swing, these controllers come in the form of listeners added to your controls. You can just embed these in your presentation layer. If you want a more clear separation, you can bundle "requests" in a controller, and have the controller add simple listeners to the view, calling the controller requests: