On Wed, 14 Sep 2022 06:25:56 GMT, Marius Hanl <mh...@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

Reply via email to