Created a base class for panels that work with controllers. Enhanced
controller to automatically call wasShown/wasHidden when its associated panel is added to and removed from the component hierarchy. git-svn-id: https://samskivert.googlecode.com/svn/trunk@659 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
@@ -0,0 +1,49 @@
|
|||||||
|
//
|
||||||
|
// $Id: ControlledPanel.java,v 1.1 2002/03/16 20:52:07 mdb Exp $
|
||||||
|
|
||||||
|
package com.samskivert.swing;
|
||||||
|
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A controlled panel takes care of setting up its controller and
|
||||||
|
* providing it. When operating in conjunction with a controlled panel,
|
||||||
|
* the controller can automatically invoke {@link Controller#wasAdded} and
|
||||||
|
* {@link Controller#wasRemoved}.
|
||||||
|
*/
|
||||||
|
public abstract class ControlledPanel extends JPanel
|
||||||
|
implements ControllerProvider
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Creates a controlled panel and its associated controller.
|
||||||
|
*/
|
||||||
|
public ControlledPanel ()
|
||||||
|
{
|
||||||
|
_controller = createController();
|
||||||
|
|
||||||
|
// let the controller know about this panel
|
||||||
|
_controller.setControlledPanel(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// documentation inherited from interface
|
||||||
|
public Controller getController ()
|
||||||
|
{
|
||||||
|
return _controller;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called to create the controller associated with this controlled
|
||||||
|
* panel. Derived classes should override this and instantiate the
|
||||||
|
* appropriate controller derived class. Note that this will be called
|
||||||
|
* very early in the construction process, before derived classes have
|
||||||
|
* access to their member data and as such, the derived panel will not
|
||||||
|
* be able to pass anything interesting to its associated controller
|
||||||
|
* constructor. The expectation is that it will obtain a reference to
|
||||||
|
* its controller later in its own constructor and supply any extra
|
||||||
|
* initialization data that is needed at that time.
|
||||||
|
*/
|
||||||
|
protected abstract Controller createController ();
|
||||||
|
|
||||||
|
/** The controller with which we are working. */
|
||||||
|
protected Controller _controller;
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: Controller.java,v 1.9 2002/02/28 21:55:14 mdb Exp $
|
// $Id: Controller.java,v 1.10 2002/03/16 20:52:07 mdb Exp $
|
||||||
//
|
//
|
||||||
// samskivert library - useful routines for java programs
|
// samskivert library - useful routines for java programs
|
||||||
// Copyright (C) 2001 Michael Bayne
|
// Copyright (C) 2001 Michael Bayne
|
||||||
@@ -25,7 +25,11 @@ import java.awt.EventQueue;
|
|||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
|
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.event.AncestorEvent;
|
||||||
|
|
||||||
import com.samskivert.Log;
|
import com.samskivert.Log;
|
||||||
|
import com.samskivert.swing.event.AncestorAdapter;
|
||||||
import com.samskivert.swing.event.CommandEvent;
|
import com.samskivert.swing.event.CommandEvent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -86,6 +90,43 @@ public abstract class Controller
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lets this controller know about the panel that it is controlling.
|
||||||
|
*/
|
||||||
|
public void setControlledPanel (JPanel panel)
|
||||||
|
{
|
||||||
|
panel.addAncestorListener(new AncestorAdapter() {
|
||||||
|
public void ancestorAdded (AncestorEvent event) {
|
||||||
|
wasAdded();
|
||||||
|
}
|
||||||
|
public void ancestorRemoved (AncestorEvent event) {
|
||||||
|
wasRemoved();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the panel controlled by this controller was added to
|
||||||
|
* the user interface hierarchy. This assumes that the controlled
|
||||||
|
* panel made itself known to the controller via {@link
|
||||||
|
* #setControlledPanel} (which is done automatically by {@link
|
||||||
|
* ControlledPanel} and derived classes).
|
||||||
|
*/
|
||||||
|
public void wasAdded ()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the panel controlled by this controller was removed
|
||||||
|
* from the user interface hierarchy. This assumes that the controlled
|
||||||
|
* panel made itself known to the controller via {@link
|
||||||
|
* #setControlledPanel} (which is done automatically by {@link
|
||||||
|
* ControlledPanel} and derived classes).
|
||||||
|
*/
|
||||||
|
public void wasRemoved ()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instructs this controller to process this action event. When an
|
* Instructs this controller to process this action event. When an
|
||||||
* action is posted by a user interface element, it will be posted to
|
* action is posted by a user interface element, it will be posted to
|
||||||
|
|||||||
Reference in New Issue
Block a user