RFR: 8351047: TitledPane should handle titles that are resizable

Andy Goryachev angorya at openjdk.org
Tue Mar 25 18:19:26 UTC 2025


On Sat, 22 Mar 2025 12:20:17 GMT, John Hendrikx <jhendrikx 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.

Looks good!

Also tried with `titleRegion.getAlignment()` code removed - still works as expected.  I agree with John it looks wrong.

The problem with inability to truncate the title label by setting max/pref width might be a separate issue since it's also present in the `master` branch.

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.

modules/javafx.controls/src/main/java/javafx/scene/control/skin/TitledPaneSkin.java line 514:

> 512:              */
> 513: 
> 514:             double labelPrefWidth = TitledPaneSkin.super.computePrefWidth(height, 0, 0, 0, 0);

On a related subject: trying to get the title label truncated (using the code sample in the ticket) did not succeed even though the TitledPane is a Labeled:


        TitledPane tp1 = new TitledPane("Left Aligned Title with a long long title with ellipses set", ...);
        tp1.setPrefWidth(100);
        tp1.setMaxWidth(100);
        tp1.setEllipsisString("...");


This seems like a possible bug to me.  What do you think?

-------------

PR Review: https://git.openjdk.org/jfx/pull/1742#pullrequestreview-2714550584
PR Review Comment: https://git.openjdk.org/jfx/pull/1742#discussion_r2012561300
PR Review Comment: https://git.openjdk.org/jfx/pull/1742#discussion_r2012653146


More information about the openjfx-dev mailing list