MVC with javaFX

priojewo picture priojewo · Apr 20, 2014 · Viewed 20.5k times · Source

I'm struggling with the MVC concept using javaFX. I am building an javaFX application using fxml files.

Each fxml file has a controller assigned, but I don't think that this controller is one as the MVC pattern states. I think of it like some sort of ViewController, which holds references to fxml objects (buttons, panes etc.).

My problem is: Where exactly is the difference between this "ViewController" and the real "Controller". What object should do what things? Where do I set e.g. actionListeners?

Answer

jewelsea picture jewelsea · Apr 21, 2014

Thoughts on MVC

MVC is a pretty loosely defined pattern which is open to (often somewhat vague) interpretations of what each of the things in MVC stand for (especially the controller). There is a great discussion of the MVC architecture with respect to GUI toolkits by Martin Fowler.

On Design Patterns and FXML

JavaFX core FXML based processing is built to be more of a toolkit rather than a complete development framework. The idea being that other frameworks could be layered on top of JavaFX and FXML and the underlying JavaFX/FXML implementations and the controllers for them would not push any kind of agenda or architectural constraints on the higher level frameworks.

As a result, there is a deliberately loose analogy and mapping of core FXML based processing and their controllers to an MVC architecture.

See JavaFX and MVP – a smörgåsbord of design patterns for further discussion.

Consider using a higher-level framework

You might benefit from adopting an "opinionated" JavaFX framework such as afterburner.fx, which utilizes controllers and FXML but provides a bit more of a rigid structured framework. Afterburner.fx follows a Model View Presenter (MVP) model. Though Afterburner.fx provides more functionality and structure than plain core JavaFX+FXML, it does so in a minimal way by adding few extra classes and APIs that you need to learn to use it.