I'd probably be a little cautious about the term 'loading' then. In particular, I'd probably read 'LAZY_LOADING' to hint that the actual tabs themselves would be loaded/created lazily (a common use case). Might be just me though.
It looks like the 'lazy' option actually does them eagerly (i.e. all on startup - not so lazy :) ), just asynchronously. I wonder if there is a need for one that does them truly 'lazily' (i.e. on selection) much like the SELECTED_TAB but once first loaded it then keeps it there instead of adding and removing each selection. Maybe not the best names below but some ideas: enum TabContentSceneGraphPolicy { // The content all the tabs are *added* to the scenegraph 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 *added* to the scenegraph at startup and content of other tabs get *added* *asynchronously* in the background. Hence there is no *adding* and *removing* of tab content when different tabs are selected as in the case of the SELECTED_TAB options. ALL_TABS_ASYNCH, //Only the content of the selected tab will be *added to the ** scenegraph* on startup and other tabs get *added* on selection. When a new tab is selected, its content is *added* into the scenegraph and the content of the previously selected tab is *removed* from the scenegraph. SELECTED_TAB_AND_REMOVE, //Only the content of the selected tab will be *added to the ** scenegraph* on startup and other tabs get *added* on selection. Once added, a Tab is kept in the scenegraph. When a new tab is selected for the first time, its content is *added* into the scenegraph, after that the tab is re-shown when selected again. SELECTED_TAB_AND_KEEP } On Thu, Jul 4, 2013 at 8:06 AM, Paru Somashekar < parvathi.somashe...@oracle.com> wrote: > ** > 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. > > thanks, > Paru. > > > 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.somashe...@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. > SELECTED_TAB_WITH_LAZY_LOADING > } > ------------------------------ ------------------------------ -- > 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. > > > >