Newsletter sign-up
View all newsletters

Sign up for our Enterprise Java Newsletter

Enterprise Java

MVC meets Swing

Explore the underpinnings of the JFC's Swing components

  • Digg
  • Reddit
  • SlashDot
  • Stumble
  • del.icio.us
  • Technorati
  • dzone
A good software user interface often finds its genesis in the user interfaces present in the physical world. Consider for a moment a simple button like one of the keys on the keyboard in front of you. With such a button there is a clean separation between the parts that compose the button's mechanism and the parts that compose its façade. The building block called a keyboard key is actually composed of two pieces. Once piece gives it its button-like behavior. The other piece is responsible for its appearance.

This construction turns out to be a powerful design feature. It encourages reuse rather than redesign. Because your keyboard's keys were designed that way, it's possible to reuse the button mechanism design, and replace the key tops to create a new key rather than designing each key from scratch. This creates a substantial savings in design effort and time.

Not surprisingly, similar benefits occur when this technique is applied to software development. One commonly used implementation of this technique in software is the design pattern called Model/View/Controller (MVC).

That's all well and good, but you're probably wondering how this relates to the Swing user interface components in the Java Foundation Classes (JFC). Well, I'll tell you.

While the MVC design pattern is typically used for constructing entire user interfaces, the designers of the JFC used it as the basis for each individual Swing user interface component. Each user interface component (whether a table, button, or scrollbar) has a model, a view, and a controller. Furthermore, the model, view, and controller pieces can change, even while the component is in use. The result is a user interface toolkit of almost unmatched flexibility.

Let me show you how it works.

The MVC design pattern

If you are not familiar with the MVC design pattern, I recommend you review "Observer and Observable", one of my earlier articles that discusses this topic in much greater detail and provides the groundwork for this month's column.

As I mentioned a moment ago, the MVC design pattern separates a software component into three distinct pieces: a model, a view, and a controller.

Figure 1. MVC design pattern

The model is the piece that represents the state and low-level behavior of the component. It manages the state and conducts all transformations on that state. The model has no specific knowledge of either its controllers or its views. The system itself maintains links between model and views and notifies the views when the model changes state.

The view is the piece that manages the visual display of the state represented by the model. A model can have more than one view, but that is typically not the case in the Swing set.

The controller is the piece that manages user interaction with the model. It provides the mechanism by which changes are made to the state of the model.

Using the keyboard key example, the model corresponds to the key's mechanism, and the view and controller correspond to the key's façade.

  • Digg
  • Reddit
  • SlashDot
  • Stumble
  • del.icio.us
  • Technorati
  • dzone
Comments (3)
Login
Forgot your account info?

I hopeBy Anonymous on October 14, 2009, 10:24 amI hope

Reply | Read entire comment

shit articlBy Anonymous on September 29, 2009, 7:34 amshit!

Reply | Read entire comment

MVC unleashed in SWINGBy Anonymous on May 20, 2009, 5:42 amA good article on MVC usage in SWING.

Reply | Read entire comment

View all comments

Add comment
Anonymous comments subject to approval. Register here for member benefits.
Have a JavaWorld account? Log in here. Register now for a free account.
Resources
  • The Swing Tutorial http://developer.javasoft.com/developer/onlineTraining/swing/
  • The JavaSoft Swing API http://www.javasoft.com/products/jfc/swingdoc-current/api/packages.html
  • The Swing Connection http://www.javasoft.com/products/jfc/swingdoc-current/
  • Download this article and the complete source as a gzipped tar file http://www.javaworld.com/javaworld/jw-04-1998/howto/jw-04-howto.tar.gz
  • Download this article and the complete source as a zip file http://www.javaworld.com/javaworld/jw-04-1998/howto/jw-04-howto.zip
  • Previous How-To Java articles