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
<mailto: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.