RFR: 8351047: TitledPane should handle titles that are resizable
John Hendrikx
jhendrikx at openjdk.org
Wed Mar 26 20:04:17 UTC 2025
On Tue, 25 Mar 2025 17:08:02 GMT, Andy Goryachev <angorya at openjdk.org> wrote:
>> This PR will forward more Label calculations to LabeledSkinBase, as they are quite complex, especially when a Graphic is involved which is a full-fledged `Node`. More specifically, this solves issues with TitledPane when the graphic is resizable (ie. an HBox is placed as Graphic in the titled pane's title area). Before, the calculations would only look at the preferred size of the graphic, and use these regardless of available space, even if the maximum size allowed for the graphic to be larger. After this fix, the more extensive LabeledSkinBase calculations are used.
>>
>> This PR also simplifies the layout calculation. Instead of manually calculating where the label should be positioned (according to alignment), this is left to `layoutLabelInArea` which will do this automatically when its provided with the available space for the label instead of the label's width.
>>
>> See the ticket for a sample program; take a look at the graphic-only case where an HBox is used to put a label + gap + button as the graphic of the titled pane.
>
> modules/javafx.controls/src/main/java/javafx/scene/control/skin/TitledPaneSkin.java line 160:
>
>> 158: registerChangeListener(titleRegion.alignmentProperty(), e -> pos = titleRegion.getAlignment());
>> 159:
>> 160: // NOTE: Listening to two different alignment properties, and using the last value of either is likely a bug!
>
> I agree: it is definitely a bug. I think we should remove it along with the possibility of specifying conflicting alignment via CSS. The control must be in control.
Yeah, the reason I was hesitant to change this is that currently you can set the alignment from CSS in two ways:
.titled-pane {
-fx-alignment: RIGHT;
}
Or:
.titled-pane > .title {
-fx-alignment: RIGHT;
}
Both will work at the moment. I'm not sure which one is more correct.
A titled pane naturally has two major regions; its title area, and its content area. The top level alignment could apply to either or none in theory. The top level alignment setting is "inherited" from being a Labeled control, which only has a single alignment to worry about (this also shows using this kind of inheritance is just a bad idea). It would have been much more clear to have a `titleAlignment` and `contentAlignment` property.
At the "top" level there is nothing to align, since a titled pane always fill its width.
-------------
PR Review Comment: https://git.openjdk.org/jfx/pull/1742#discussion_r2014914945
More information about the openjfx-dev
mailing list