Usecase for needsLayout property?

John Hendrikx hjohn at xs4all.nl
Wed Jun 5 12:25:40 PDT 2013


Thanks Martin,

I've done my best to quickly "extract" the code from my application... 
however, I cannot reproduce the issue there in a direct fashion -- 
however, I did discover an issue which may be the reason I see a partial 
group, I filed that as RT-30952 (TilePane doesn't appear until after 
Stage resized a bit).

Basically, my main application is much more "active", and will do a lot 
of background stuff, which may trigger more layouts -- that's why there 
I may only see the partial group for a moment (flickering when I scroll 
through the big list) before it gets displayed completely.  In this test 
application, I see it much more directly where the group that I want to 
see is simply not complete until more action is taken.

I also filed another issue, RT-30951 because the resizing of a Stage is 
very jittery (the controls keep moving a bit from their correct 
positions when in the process of resizing a Stage)... seems like some 
font-metrics or other calculation is not producing repeatable results 
resulting in a slightly different layout every time...

--John

On 5/06/2013 13:04, Martin Sladecek wrote:
> Hi John,
> the problem you described is most likely caused by something else as 
> the layout pass occurs BEFORE the actual rendering.
> Also, you bind managed and visible of the entire VBox, not just the 
> title. So it's strange that you see Label correctly laid-out, but not 
> the content.
>
> Can you make some sample and attach it to a JIRA issue, so I can have 
> a look what's actually happening there?
>
> Thanks,
> -Martin
>
> On 06/05/2013 11:29 AM, John Hendrikx wrote:
>> I'm having a bit of a chicken-egg problem with regards to some 
>> dynamically sized components I'm displaying in my application.
>>
>> Description:
>> I have a group with a title that wraps some content and displays a 
>> title above it -- the entire group, including the title must be 
>> hidden and unmanaged when the content it is wrapping is empty, here 
>> it is in code:
>>
>> protected Pane createTitledBlock(final String title, final Node 
>> content, final BooleanExpression visibleCondition) {
>> return new VBox() {{
>> setFillWidth(true);
>> getChildren().add(new Label(title) {{
>> getStyleClass().add("header");
>> }});
>> getChildren().add(content);
>> if(visibleCondition != null) {
>> managedProperty().bind(visibleCondition);
>> visibleProperty().bind(visibleCondition);
>> }
>> }};
>> }
>>
>>
>> Problem:
>> When the content becomes available and visibleCondition gets toggled 
>> to true, the content part of the titled group is not yet laid out. 
>> This causes the title to be visible without any content briefly until 
>> a layout pass occurs.
>>
>> Timeline:
>> - Group with title is hidden/unmanaged
>> - The content gets updated and visibleCondition is set to true
>> - Group with title becomes visible/managed
>> - Briefly an empty group with title is displayed
>> - Layout occurs, group with title gets resized
>>
>> Now, I'm thinking of playing with the needsLayout property and 
>> delaying the making visible/managed of the titled group until 
>> needsLayout is false... however, I have a feeling that won't work as 
>> an unmanaged/hidden group is probably not gonna participate in the 
>> layout, resulting in needsLayout never becoming false again as it is 
>> not visible/managed yet...
>>
>> Any ideas how I could resolve this, and have the group with title 
>> only visible and managed when it is properly laid out?
>>
>> Also, has any progress in general been made with regards to 
>> hidden/unmanaged controls and determining their expected size when 
>> they're made visible/managed?
>>
>> --John
>



More information about the openjfx-dev mailing list