RFR: 5108458: JTable does not properly layout its content [v5]
Alexey Ivanov
aivanov at openjdk.org
Mon Nov 20 16:25:28 UTC 2023
On Mon, 20 Nov 2023 05:24:51 GMT, Tejesh R <tr at openjdk.org> wrote:
>> Table contents does not follow right-left Orientation when Max width of columns are set. This is due to not considering the offset in `x position` while painting table grid and table cell. The fix handles the offset and adjust the x position for each paint, similar to how header is painted. The fix is applied to both Basic and Synth Look and Feel.
>> The fix is verified for all Look and Feel manually and test verifies on Metal L&F since automatic test cannot be generalized throughout other Look and Feel.
>> CI tested is green for regression check and test check.
>
> Tejesh R has updated the pull request incrementally with one additional commit since the last revision:
>
> Review fix
src/java.desktop/share/classes/javax/swing/plaf/synth/SynthTableUI.java line 855:
> 853: }
> 854: }
> 855: private int getXPosition(int column) {
This method is exactly the same as in `BasicTableUI`, if I don't miss anything.
You should rather move this to a utility class which is accessible to both `-UI` classes. Even more: if you're following the same code path that's implemented for `JTableHeader`, you should consider re-using the code from the header painting too… by extracting the relevant parts to a utility class if appropriate.
If another bug is found, it will need to be fixed in *one place* instead of several places which repeat the same code.
test/jdk/javax/swing/JTable/JTableRightAlignmentTest.java line 57:
> 55: */
> 56:
> 57: public class JTableRightAlignmentTest {
As far as I understood from the description, it's about **Orientation**—left-to-right vs. right-to-left—rather than alignment.
test/jdk/javax/swing/JTable/JTableRightAlignmentTest.java line 87:
> 85: SwingUtilities.invokeAndWait(() -> {
> 86: int maxHeight = (int) (((double) table.table.getTableHeader().getHeight())
> 87: + ((double) table.table.getHeight()));
Why do you need to convert the height to `double`?
test/jdk/javax/swing/JTable/JTableRightAlignmentTest.java line 93:
> 91: .getColumn(2)
> 92: .getWidth() - 1;
> 93: Color expectedRGB = robot.getPixelColor(xPos, yPos);
I suggest capturing the screen rectangle and then sample the colours of the captured buffered image, or alternatively even paint into a buffered image.
test/jdk/javax/swing/JTable/JTableRightAlignmentTest.java line 100:
> 98: saveImage(failImage, "failureImage.png");
> 99: passed = false;
> 100: failureString = "Test Failed at <" + xPos + ", " + y + ">";
`failureString == null` implies `passed` has the value `true` — one variable / field is enough.
test/jdk/javax/swing/JTable/JTableRightAlignmentTest.java line 144:
> 142: "Salary",
> 143: };
> 144: List data = new ArrayList();
You should use generic `List<CustomTable.Data>` rather than raw one.
test/jdk/javax/swing/JTable/JTableRightAlignmentTest.java line 157:
> 155: }
> 156:
> 157: class Data {
It should be static. You can use a `record` for simplicity.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/16374#discussion_r1399424912
PR Review Comment: https://git.openjdk.org/jdk/pull/16374#discussion_r1399427167
PR Review Comment: https://git.openjdk.org/jdk/pull/16374#discussion_r1399431006
PR Review Comment: https://git.openjdk.org/jdk/pull/16374#discussion_r1399435563
PR Review Comment: https://git.openjdk.org/jdk/pull/16374#discussion_r1399441176
PR Review Comment: https://git.openjdk.org/jdk/pull/16374#discussion_r1399446461
PR Review Comment: https://git.openjdk.org/jdk/pull/16374#discussion_r1399449675
More information about the client-libs-dev
mailing list