RFR: 8293119: Alternative CONSTRAINED_RESIZE_POLICY

Andy Goryachev angorya at openjdk.org
Wed Oct 12 15:33:55 UTC 2022


On Wed, 14 Sep 2022 06:25:56 GMT, Marius Hanl <mhanl at openjdk.org> wrote:

>> The current CONSTRAINED_RESIZE_POLICY has a number of issues as explained in [JDK-8292810](https://bugs.openjdk.org/browse/JDK-8292810).
>> 
>> We propose to address all these issues by replacing the old column resize algorithm with a different one, which not only honors all the constraints when resizing, but also provides 4 different resize modes similar to JTable's. The new implementation brings changes to the public API for Tree/TableView and ResizeFeaturesBase classes. Specifically:
>> 
>> - create a public abstract javafx.scene.control.ConstrainedColumnResizeBase class
>> - provide an out-of-the box implementation via javafx.scene.control.ConstrainedColumnResize class, offeting 4 resize modes: AUTO_RESIZE_NEXT_COLUMN, AUTO_RESIZE_SUBSEQUENT_COLUMNS, AUTO_RESIZE_LAST_COLUMN, AUTO_RESIZE_ALL_COLUMNS
>> - add corresponding public static constants to Tree/TableView
>> - make Tree/TableView.CONSTRAINED_RESIZE_POLICY an alias to AUTO_RESIZE_SUBSEQUENT_COLUMNS (a slight behavioral change - discuss)
>> - add getContentWidth() and setColumnWidth(TableColumnBase<S,?> col, double width) methods to ResizeFeatureBase
>> - suppress the horizontal scroll bar when resize policy is instanceof ConstrainedColumnResizeBase
>> - update javadoc
>> 
>> 
>> Notes
>> 
>> 1. The current resize policies' toString() methods return "unconstrained-resize" and "constrained-resize", used by the skin base to set a pseudostate. All constrained policies that extend ConstrainedColumnResizeBase will return "constrained-resize" value.
>> 2. The reason an abstract class ( ConstrainedColumnResizeBase) was chosen instead of a marker interface is exactly for its toString() method which supplies "constrained-resize" value. The implementors might choose to use a different value, however they must ensure the stylesheet contains the same adjustments for the new policy as those made in modena.css for "constrained-resize" value.
>
> modules/javafx.controls/src/main/java/javafx/scene/control/TableView.java line 440:
> 
>> 438: 
>> 439:     // TODO to be renamed to CONSTRAINED_RESIZE_POLICY
>> 440:     public static final Callback<TableView.ResizeFeatures, Boolean> CONSTRAINED_RESIZE_POLICY_SUBSEQUENT_COLUMNS =
> 
> Instead of renaming we can also deprecate the 'old' `CONSTRAINED_RESIZE_POLICY` ?

Good question.

We could deprecate the old policy, although leaving it as is also leaves all its issues in place (see JDK-8292810).  There is a subtle behavioral difference between the old CONSTRAINED_RESIZE_POLICY and CONSTRAINED_RESIZE_POLICY_SUBSEQUENT_COLUMNS that people might notice and may not like.  The difference is that the old policy works similar to CONSTRAINED_RESIZE_POLICY_LAST_COLUMN until the last column cannot be resized, then it resizes one before it.

Another option is that we could add another policy which will work exactly (minus bugs) as the old one.  What do you think?

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

PR: https://git.openjdk.org/jfx/pull/897


More information about the openjfx-dev mailing list