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:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user