Reputation: 947
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?
Upvotes: 27
Views: 22293
Reputation: 159576
Update 2022
The best write-up on this topic is Eden Coding’s:
The best StackOverflow answer is:
The original answer from many years ago follows. Some of the information in it is still relevant. Some links and referenced frameworks are no longer available or supported. However, you don’t need a framework outside of the JavaFX core capabilities to implement the concepts (as demonstrated in the modern links in this update).
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.
Upvotes: 22
Reputation: 545
You can try JRebirth with its custom-tailored pattern: wB-CS-Mvc
This is a 2-level MVC pattern, first MVC (application-level) is CSM and the second one is Mvc itself (ui-level).
You can run the JRebirth Tour Application to learn more (Java 8 required):
http://apps.jrebirth.org/jaf/3.0.0/JRebirthTour-3.0.0.jar
java -jar JRebirthTour-3.0.0.jar
You can also run the Demo application:
http://apps.jrebirth.org/demo/8.5.0/JRebirthDemo-8.5.0.jar
java -jar JRebirthDemo-8.5.0.jar
or browse slides (slightly outdated): http://fr.slideshare.net/SbastienBordes/javafx-unleashed-with-jrebirth-application-framework
Upvotes: 2