API REVIEW for TabPane tab content loading and fixed content size

Paru Somashekar parvathi.somashekar at oracle.com
Wed Jul 3 15:06:00 PDT 2013

Hi Daniel,

Yes, loading is referring to when the tab content gets added to the 
scene. The API to add tabs to TabPane remain the same - the new API is 
only proposing a policy that controls how they get added & removed from 
the scenegraph.


On 7/3/13 2:35 PM, Daniel Zwolenski wrote:
> Hi Paru,
> What do you mean by 'loaded'?
> Currently we create the tabs and then manually add them doing 
> something like:
>     TabPane tabPane = new TabPane();
>     tabPane.getTabs().add(new Tab("Tab1"));
> Wouldn't all the 'loading' have already happened before TabPane gets a 
> look in? Or are you talking about when the tabs get added to the scene?
> Cheers,
> Dan
> On Thu, Jul 4, 2013 at 7:03 AM, Paru Somashekar 
> <parvathi.somashekar at oracle.com 
> <mailto:parvathi.somashekar at oracle.com>> wrote:
>     JIRA : https://javafx-jira.kenai.com/ browse/RT-24105
>     <https://javafx-jira.kenai.com/browse/RT-24105> &
>     https://javafx-jira.kenai.com/ browse/RT-30648
>     <https://javafx-jira.kenai.com/browse/RT-30648>
>     The following is API to control how tab content gets loaded for a
>     TabPane in order to improve startup time and runtime performance
>     for a TabPane.
>     Jonathan has already reviewed the following API and I have
>     incorporated his feedback. Thanks Jonathan.
>      TabContentSceneGraphPolicy is a static enum within TabPane
>     ------------------------------ ------------------------------
>     public static enum TabContentSceneGraphPolicy {
>              //The content all the tabs get loaded up front with no
>     optimization. If there are a lot of tabs and content is large -
>     this could potentially cause slow start up time. This is the
>     default behavior.
>             ALL_TABS,
>              //Only the content of the selected tab will be loaded on
>     startup and other tabs get loaded on selection. When a new tab is
>     selected, its content is loaded into the scenegraph and the
>     content of the previously selected tab is unloaded from the
>     scenegraph.
>             SELECTED_TAB,
>              //Only the content of the selected tab will be loaded at
>     startup and content of other tabs get loaded lazily in the
>     background. Hence there is no loading and unloading of tab content
>     when different tabs are selected as in the case of SELECTED_TAB
>     option.
>         }
>     ------------------------------ ------------------------------ --
>      API to specify fixed Width/Height/Size for tab content.
>     private DoubleProperty fixedWidth
>     public final void setFixedWidth(double value)
>     public final double getFixedWidth()
>     public final DoubleProperty fixedWidthProperty()
>     private DoubleProperty fixedHeight
>     public final void setFixedHeight(double value)
>     public final double getFixedHeight()
>     public final DoubleProperty fixedHeightProperty()
>     public final void setFixedSize(double width, double height)
>     ------------------------------ ------------------------------ ----
>     Notes on performance considerations
>     The TabPane offers some performance optimizations in the area of
>     tab content loading. Basically the default policy is to load the
>     contents of all specified tabs. If the TabPane consists of a large
>     number of big content tabs, then this could lead to a potential
>     slow start up time, as it will have to spend some time in loading
>     all the content up front before starting up.
>     In such situations, the TabPane allows specification of the
>     TabContentSceneGraphPolicy which determines how the tab contents
>     are loaded : all tabs, selected tab only, or selected tab and lazy
>     loading of the rest of the tabs. The selected tab only option also
>     ensures the content of the previously selected tab is removed from
>     the scenegraph. This gives the added benefit of ensuring that no
>     scenegraph related activities are performed on any of the tab
>     contents that is not currently selected. However this could
>     potentially cause the tab switch operation to be a bit slow. In
>     order to achieve faster tab switch operation, the third option is
>     provided where the content of the rest of the tabs are loaded
>     lazily in the background. However the lazy loading option could
>     result in a slower runtime performance.
>     Another area of optimization is provided for specifying a fixed
>     width / height / size of the tab content area. If a fixed value is
>     specified, measurement of the tab content sizes for the purpose of
>     setting the available space is eliminated, thus providing faster
>     resize operations on windows that contain a TabPane in them.
>     ------------------------------ ------------------------------ ---
>     There might be a situation where the TabContentSceneGraphPolicy is
>     set to SELECTED_TAB in which case only the content of the selected
>     tab is loaded and user does not set fixed size. In such a case, we
>     can either do one of the following,
>     1) hardcode a fixed size if it is not already set
>     2) measure the selected tab only and grow in size only if the size
>     of the next selected tab is bigger than the previous one.
>     3) throw an exception if SELECTED_TAB is chosen and fixed size is
>     not set.
>     I prefer option either 1 or 2, that way we do not force the
>     developer to set a fixed size for the tab content.
>     Thoughts suggestions welcome, I shall go with option 1 if I don't
>     hear any.

More information about the openjfx-dev mailing list