On Sun, 22 Jan 2023 15:34:25 GMT, JoachimSchriek <d...@openjdk.org> wrote:

>> This is my (joachim.schr...@gmx.de) first contribution to openjfx. My 
>> Contributor Agreement is signed but still in review.
>> So please be patient with an absolute beginner as contributor ... .
>> The work of this pull request was fully done in my spare time.
>> 
>> I first filed the bug myself in 2017. I had begun working with JavaFX in 
>> 2014.
>> 
>> The two changes address the two problems mentioned in JDK-8173321:
>> - Using a JavaFX TableView, a click on the right trough has no effect when 
>> the cell height of the cell currently displayed is higher than viewport 
>> height
>> - The ScrollBar ist displayed with a minimal height.
>> 
>> The changes were tested and ran well with Java 17 and the current master 
>> branch of openjfx.
>
> JoachimSchriek has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Deleted trailing whitespace

I left a few inline comments. Most are pretty minor, but I am a bit concerned 
about the change to the computation of the visible amount of the `lengthBar`.

modules/javafx.controls/src/main/java/com/sun/javafx/scene/control/VirtualScrollBar.java
 line 135:

> 133:             /**
> 134:              * JDK-8173321: Click on trough has no effect when cell 
> height > viewport height:
> 135:              * Solution: Scroll one cell further up resp. down if only 
> one cell is shown.

We generally do not refer to specific bug IDs in source code comments. Rather, 
describe the purpose of this block. Also, please spell out `resp.` -- I can't 
figure out what it is supposed to mean.

modules/javafx.controls/src/main/java/com/sun/javafx/scene/control/VirtualScrollBar.java
 line 151:

> 149:                     IndexedCell cell = firstVisibleCell;
> 150:                     if (cell == null)
> 151:                         return;

Unless the if statement, including its target, is entirely on one line, you 
_must_ enclose the target of the `if` with curly braces, like this:


                    if (cell == null) {
                        return;
                    }


Since it fits on one line, the prior code is also acceptable:


                    if (cell == null) return;

modules/javafx.controls/src/main/java/com/sun/javafx/scene/control/VirtualScrollBar.java
 line 156:

> 154:                     IndexedCell cell = lastVisibleCell;
> 155:                     if (cell == null)
> 156:                         return;

Either revert this or enclose in curly braces.

modules/javafx.controls/src/main/java/javafx/scene/control/skin/VirtualFlow.java
 line 2595:

> 2593:         if (recreate && (lengthBar.isVisible() || 
> Properties.IS_TOUCH_SUPPORTED)) {
> 2594:             final int cellCount = getCellCount();
> 2595:             float numCellsVisibleOnScreen = 0;

Can you explain why this needs to be in floating point?

Presuming that it does need to be in floating-point, I recommend making this a 
double to match `lengthToAdd`.

modules/javafx.controls/src/main/java/javafx/scene/control/skin/VirtualFlow.java
 line 2602:

> 2600:                     sumCellLength += lengthToAdd;
> 2601:                     if (sumCellLength > flowLength) {
> 2602:                         numCellsVisibleOnScreen += ( 1 - (sumCellLength 
> - flowLength )/ lengthToAdd);

Minor: remove the spaces after the `(` and before the `)`, and add a space 
before the `/` like this:


                        numCellsVisibleOnScreen += (1 - (sumCellLength - 
flowLength ) / lengthToAdd);

modules/javafx.controls/src/main/java/javafx/scene/control/skin/VirtualFlow.java
 line 2611:

> 2609: 
> 2610:             lengthBar.setMax(1);
> 2611:             lengthBar.setVisibleAmount( numCellsVisibleOnScreen / 
> (float) cellCount);

I'm concerned with the change to no longer use the estimated size. This will 
produce very different results for tables with variable row hights. @johanvos 
will very likely want to comment on this.

Also, The cast is unnecessary.

Minor: remove the space after the `(`

tests/system/src/test/java/test/robot/javafx/scene/tableview/TableViewClickOnTroughTest.java
 line 2:

> 1: /*
> 2:  * Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights 
> reserved.

Update the "last touched year" to 2023. Also, unless this is substantially the 
same as some other class that you copied, you can change the `2018,` to `2022,`.

tests/system/src/test/java/test/robot/javafx/scene/tableview/TableViewClickOnTroughTest.java
 line 99:

> 97:         } catch (InterruptedException e1) {
> 98:             e1.printStackTrace();
> 99:         }

You can change this to `Util.sleep(1000);` and eliminate the try/catch here and 
below.

tests/system/src/test/java/test/robot/javafx/scene/tableview/TableViewClickOnTroughTest.java
 line 108:

> 106:             latch.countDown();
> 107:         });
> 108:         Util.waitForLatch(latch, 5, "Timeout while waiting for mouse 
> click");

Suggestion: If you change `Platform.runLater` to `Util.runAndWait` you can 
eliminate the latch (it will do that for you).

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

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

Reply via email to