Hi,

either I don't see the forest for the trees or something is missing in the
TableView API as I cannot seem to implement something that seems a common
requirement and was rather easy (not pretty though) in Swing.

Imagine an application like OSX finder in its list view, i.e. something
that displays a possibly very long list of files and displays thumbnails
for them generated on the fly. For many files (e.g. video files) extracting
these thumbnails is an expensive operation and has to be performed in the
background. My application does a very similar thing and uses a TableView.
What I want is to begin extracting video thumbnails as soon as their
corresponding table row has become visible. I have done that in Swing in
the past without any problem (for more info, you can read
https://community.oracle.com/message/12810930).

With JavaFX I have tried the following:

1) Trigger loading the thumbnail in the table cell when it is updated and
the corresponding thumbnail isn't already there

Result: Triggering works more or less as desired but how do I stop the
loading process if the cell becomes invisible? If the user quickly scrolls
through a large number of rows and puts tons of thumbnail loading jobs on
the queue I have not found a way to dequeue them, so this is unusable. I
added output to the calls to the update method of the TableCell to see
which instances are used and how their data is reset but the pattern I see
is not suitable for deciding which cell is currently visible.

2) Register a change listener to the TableCell’s visible property to make
that control the image loading.

Result: I don’t seem to get any change events when I do that, so it does
not work at all for my purpose.

I see no public API in table view to explicitly compute the items visible
in the current viewport either. What am I missing. It can't be an oversight
in the API design, as the thing, I am trying to achieve appears rather
basic.

Thanks in advance for any hints,

Robert

Reply via email to