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. any user-provided constrained resize policies must extends ConstrainedColumnResizeBase.
- 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, AUTO_RESIZE_FLEX_HEAD, CONSTRAINED_RESIZE_POLICY_FLEX_HEAD, and CONSTRAINED_RESIZE_POLICY_FLEX_TAIL
- add corresponding public static constants to Tree/TableView
- mark Tree/TableView.CONSTRAINED_RESIZE_POLICY as deprecated and an alias to CONSTRAINED_RESIZE_POLICY_FLEX_TAIL (a slight behavioral change - discuss)
- add getContentWidth() and setColumnWidth(TableColumnBase<S,?> col, double width) methods to ResizeFeatureBase
- suppress the horizontal scroll bar when the resize policy is instanceof ConstrainedColumnResizeBase
- update javadoc
CSR is required because of public API changes in Tree/TableView, ResizeFeatureBase classes.
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. In the presence of snapping and fractional scale, the implemented algorithm would never work correctly. The reason is that the distance between snapped positions is not the same. As a result, changing a single column width requires shifting of subsequent or all the columns, which in turn might require a change in their widths, and so on. See JDK-8299753.
3. A very minor cosmetic issue is observed with snapping and fractional scale, see JDK-8299755.
- csr for
-
JDK-8294398 Additional constrained resize policies for Tree/TableView
- Closed
- duplicates
-
JDK-8089456 CONSTRAINED_RESIZE_POLICY sometimes ignored when setMaxWidth is used
- Closed
-
JDK-8090112 Wrong TableView headers width when using TableView.CONSTRAINED_RESIZE_POLICY
- Closed
-
JDK-8157687 TableView.CONSTRAINED_RESIZE_POLICY does honor column preferred widths
- Closed
-
JDK-8091269 Cannot set initial column sizes with CONSTRAINED_RESIZE_POLICY
- Closed
- is blocked by
-
JDK-8293883 Add tests/.classpath (Eclipse)
- Resolved
- relates to
-
JDK-8292810 ☂ CONSTRAINED_RESIZE_POLICY issues
- Resolved
-
JDK-8299753 Tree/TableView: Column Resizing With Fractional Scale
- In Progress
-
JDK-8299755 Tree/TableView: Cursor Decouples From Divider When Resizing With Fractional Scale
- In Progress
-
JDK-8294469 Deprecate for removal ResizeFeaturesBase public constructor
- Closed
-
JDK-8294470 Remove ResizeFeaturesBase public constructor
- Closed