A component that can be added to a hierarchy that won't add its sub-components

until it is visible.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@1435 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
ray
2004-05-21 20:57:12 +00:00
parent 507929ecc9
commit 147cea484c
@@ -0,0 +1,71 @@
//
// $Id: LazyComponent.java,v 1.1 2004/05/21 20:57:12 ray Exp $
package com.samskivert.swing;
import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JComponent;
/**
* A component that doesn't actually create its content until it is
* visible and actually showing. This was made to support lazy-creation
* in JTabbedPane, since normally adding a compent to a JTabbedPane
* creates each component and their associated controllers.
*/
public class LazyComponent extends JComponent
{
/**
* An interface for creating the actual content that will live
* in this component.
*/
public interface ContentCreator
{
/**
* Create the content at the time that it is needed.
*/
public JComponent createContent ();
}
/**
* Create a lazy component.
*/
public LazyComponent (ContentCreator creator)
{
_creator = creator;
}
// documentation inherited
public void addNotify ()
{
super.addNotify();
checkCreate();
}
// documentation inherited
public void setVisible (boolean vis)
{
super.setVisible(vis);
checkCreate();
}
/**
* Check to see if we should now create the content.
*/
protected void checkCreate ()
{
if (_creator != null && isShowing()) {
// ideally, we would replace ourselves in our parent, but that
// doesn't seem to work in JTabbedPane
setLayout(new BorderLayout());
add(_creator.createContent(), BorderLayout.CENTER);
_creator = null;
}
}
/** The content creator. */
protected ContentCreator _creator;
}