Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / September 2006

Tip: Looking for answers? Try searching our database.

Question on MVC model

Thread view: 
Suma Shanbhog - 04 Sep 2006 09:48 GMT
Hello All,

I am having an MVC model for my controls....
That is, if any new control has to be added, I have to add a model, a view
class and a controller class...

Inspite of this is there scope for any design pattern to be used for
communication between these classes?? I always felt that just following MVC
should eb sufficient...

I know this may not be the right forum for this kind of question but I
didn't locate any group discussing design.

Any help is greatly appriciated

Thanks!
Suma
Stefan Ram - 04 Sep 2006 14:12 GMT
>That is, if any new control has to be added, I have to add a
>model, a view class and a controller class...

 You need a view, controller and model /object/.
 
   - Multiple objects might share a class when appropriate.

   - Multiple views and controllers might share a model
     when appropriate.

>Inspite of this is there scope for any design pattern to be used for
>communication between these classes??

 The communication is also treated in MVC.

>I always felt that just following MVC should eb sufficient...

 Nowadays there are multiple different architectures labeled
 "MVC", differing more or less from the original MVC.

 Moreover, Swing uses a variant that might be called
 "UI-delegate and model".

 The most pragmatic approach might be to forget MVC for
 the moment and learn Swing by Sun's Swing tutorial.

>I know this may not be the right forum for this kind of
>question but I didn't locate any group discussing design.

 See also: comp.lang.java.gui

 If one really tries to use the original MVC

http://st-www.cs.uiuc.edu/users/smarch/st-docs/mvc.html

 in Java, it might look like this attempt of mine to
 implement a simple toggle-button:

public class ButtonModel
{ public static void main( final java.lang.String[] args )
 { javax.swing.SwingUtilities.invokeLater( new FrameController() ); }}

class FrameView
{ FrameController controller = null;
 Button1View button = null;
 javax.swing.JFrame frame = null; /* MVC "subView" */
 public FrameView()
 { frame = new javax.swing.JFrame( "MVC" );
   frame.setDefaultCloseOperation
   ( javax.swing.JFrame.DO_NOTHING_ON_CLOSE );
   final Button1Model model = new Button1Model();
   final Button1Controller controller = new Button1Controller();
   controller.setModel( model );
   button = new Button1View( frame, model, controller );
   frame.pack(); frame.setVisible( true ); }
 public void setController // MVC "model:controller:"
 ( final FrameController controller )
 { this.controller = controller;
   this.controller.setView( this );
   frame.addWindowListener( this.controller ); }
 public void releaseController() /* MVC "release" */
 { frame.removeWindowListener( this.controller );
   this.controller.releaseView();
   this.controller = null; }
 public void dispose() /* MVC "release" */
 { this.button.dispose(); this.button = null;
   this.frame.dispose(); this.frame = null; }}

class FrameController // MVC "Top-Level Controller
implements java.lang.Runnable, // MVC "StandardSystemController"
java.awt.event.WindowListener
{ FrameView view = null;
 public void setView( final FrameView view ) /* MVC "view" */
 { this.view = view; }
 public void releaseView()
 { this.view = null; }
 public void run() // MVC "open" (cto)
 { FrameView view = new FrameView();
   view.setController( this ); }
 public void windowClosing /* MVC "terminate" */
 ( final java.awt.event.WindowEvent e )
 { FrameView view = this.view;
   view.releaseController();
   view.dispose(); }  
 public void windowOpened( final java.awt.event.WindowEvent e ){}
 public void windowDeactivated( final java.awt.event.WindowEvent e ){}
 public void windowDeiconified( final java.awt.event.WindowEvent e ){}
 public void windowIconified( final java.awt.event.WindowEvent e ){}
 public void windowActivated( final java.awt.event.WindowEvent e ){}
 public void windowClosed( final java.awt.event.WindowEvent e){} }

class Button1View /* MVC "view" */
implements java.beans.PropertyChangeListener
{ javax.swing.JButton button = null;
 javax.swing.JFrame frame = null;
 Button1Model button1Model = null;
 private java.lang.String labelText( final boolean state )
 { return state ? "ausschalten" : "einschalten"; }
 public Button1View /* MVC "model:controller" (va3) */
 ( final javax.swing.JFrame frame,
   final Button1Model button1Model,
   final java.awt.event.ActionListener controller )
 { assert javax.swing.SwingUtilities.isEventDispatchThread();
   this.button1Model = button1Model;
   this.button = new javax.swing.JButton( labelText( this.button1Model.isOn() ));
   this.button.addActionListener( controller );
   this.button1Model.addButton1Listener( this );
   this.frame = frame;
   this.frame.add( this.button ); }
 public void propertyChange
 ( java.beans.PropertyChangeEvent propertyChangeEvent )
 { java.lang.System.out.println( "changed" );
   this.button.setText( labelText( this.button1Model.isOn() )); }
 public void dispose()
 { this.button1Model.removeButton1Listener( this );
   this.frame.remove( this.button );
   this.button = null; }}

class Button1Controller
implements java.awt.event.ActionListener
{ Button1Model button1Model = null;
 public void setModel( final Button1Model button1Model )
 { this.button1Model = button1Model; }
 public void actionPerformed /* MVC event (cpe) */
 ( final java.awt.event.ActionEvent actionEvent )
 { button1Model.toggle(); }}

class Button1Model
{ private boolean state = false;
 javax.swing.event.SwingPropertyChangeSupport listeners;
 public Button1Model()
 { listeners =
   new javax.swing.event.SwingPropertyChangeSupport( this ); }
 public boolean isOn(){ return state; }
 public void toggle(){ state = !state; changedState(); }  
 private void changedState()
 { this.listeners.firePropertyChange
   ( new java.beans.PropertyChangeEvent
     ( this, "on", state, !state )); }
 public void addButton1Listener
 ( final java.beans.PropertyChangeListener l )
 { this.listeners.addPropertyChangeListener( l ); }
 public void removeButton1Listener
 ( final java.beans.PropertyChangeListener l )
 { this.listeners.removePropertyChangeListener( l ); }}
Suma Shanbhog - 05 Sep 2006 04:59 GMT
Thanks!

Regards
Suma

> >That is, if any new control has to be added, I have to add a
> >model, a view class and a controller class...
[quoted text clipped - 141 lines]
>   ( final java.beans.PropertyChangeListener l )
>   { this.listeners.removePropertyChangeListener( l ); }}


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2009 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.