[Review Request] Support fixed cell heights in JavaFX UI controls
han.solo at muenster.de
Mon May 20 01:27:49 PDT 2013
Nice addition and highly appreciated for embedded development.
I personally like the fixedCellHeight DoubleProperty approach more than fixedCellLength but I'll be happy with whatever you will come up with :)
Am 20.05.2013 um 04:41 schrieb Jonathan Giles <jonathan.giles at oracle.com>:
> Hi all,
> In our ongoing effort to make JavaFX fast, especially on constrained systems such as the Raspberry Pi, I'd like to propose the addition of API to the ListView, TreeView, TreeTableView and TableView controls that allows for developers to specify a fixed row height for all rows. Should a developer set this, they would be explicitly telling JavaFX that their cells will not dynamically resize. In return for giving up this functionality, JavaFX can do two things that massively helps performance:
> 1) The virtualisation code can short-circuit all height measurements (and many resizing operations). This saves JavaFX from having to perform massive amounts of string measurement, which is a big bottleneck.
> 2) The TableView and TreeTableView controls can virtualise in the horizontal direction. In other words, for all columns that are not visible (as the width of all columns exceeds the width of the TableView itself), the cells contained within obstructed columns will be removed from the scenegraph (and added back in as necessary as the user scrolls horizontally). This saves JavaFX from having to perform CSS / layout on all of these cells. The reason why this is enabled only with fixed cell height is because we can not know whether cells outside the visible area have an impact on the row height.
> In our tests enabling a fixed row height has massive gains in runtime and startup performance. It won't be useful to everyone, but I would imagine that it would be applicable for most people. However, because enabling this by default would potentially break a lot of people, this functionality will _not_ be enabled by default.
> I'm slightly conscious of the fact that using the term 'fixed cell _height_' is confusing in the case of a ListView which is laid out horizontally. Therefore, my suggested API would be either a fixedCellHeight double property or a fixedCellLength double property (where length is the term used internally to differentiate from the cell breadth). From an ease-of-understanding point of view I much prefer fixedCellHeight however - most people won't be using horizontal ListViews, so it is unlikely to be confusing. My preferred approach would be to have the property default to Region.USE_COMPUTED_SIZE to indicate that fixed cell height should not be used. To enable the functionality, a positive value can be set. I'm not wed to using Region.USE_COMPUTED_SIZE, so if that feels confusing we could just state a negative value will disable the value.
> -- Jonathan
More information about the openjfx-dev