priojewo
priojewo

Reputation: 947

MVC with javaFX

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

Answers (2)

jewelsea
jewelsea

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

Sébastien B.
Sébastien B.

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).

  • Wave for messaging and async internal event handling
  • Behavior to add common code to any Component (C|S|M)
  • Command to manage application commands (reusable code)
  • Service to handle some long service into thread pool
  • Model to manage the Model of your UI
  • View to create your UI
  • Controllers to handle user events

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

Related Questions