RFR: 8277922: Unable to click JCheckBox in JTable through Java Access Bridge [v2]
Anton Litvinov
alitvinov at openjdk.java.net
Thu Feb 24 11:14:03 UTC 2022
On Thu, 24 Feb 2022 10:38:58 GMT, Anton Litvinov <alitvinov at openjdk.org> wrote:
>> Hello,
>>
>> Could you please review the following fix for the bug. The bug consists in the fact that When an assistive technology software by means of Java Access Bridge API executes "AccessibleAction" "click" on "AccessibleContext" which corresponds to "javax.swing.JTable" cell containing "javax.swing.JCheckBox", then the cell's value and cell's view represented by "JCheckBox" stay unchanged. The issue is a bug in JDK and should be fixed in JDK, because JDK informs the assistive technology software through Java Access Bridge API in particular through the function
>>
>> "BOOL getAccessibleActions(long vmID, AccessibleContext accessibleContext, AccessibleActions *actions)"
>>
>> that "AccessibleContext" of the table cell with "JCheckBox" supports one action "click", while real execution of this action on this accessible context does not lead to any result.
>>
>> THE ROOT CAUSE OF THE BUG:
>>
>> The reason of the issue is the fact that when the assistive technology software tries to do "AccessibleAction" on "AccessibleContext" associated with a cell with boolean data type in "JTable" component through Java Access Bridge (JAB), the JDK executes this "AccessibleAction" on "AccessibleContext" of a renderer, which is an instance of the class "javax.swing.JTable.BooleanRenderer" which is a derivative of "JCheckBox" class, and the instance of this renderer is single and common for all cells of boolean data type. Therefore execution of "click" "AccessibleAction" on this renderer component which is not permanently bound to any particular cell in the table does not lead to update of the table cell value.
>>
>> THE FIX:
>>
>> The fix implements an approach which guarantees setting of new values to the table's cells with boolean data type on each execution of "AccessibleAction" of "javax.swing.JTable.BooleanRenderer" instance, when execution of this action changes the "selected" state of this "BooleanRenderer" JCheckBox component.
>>
>> Please take into account that the created automatic regression test simulates the issue only with Java Accessibility API what is not fully equal to the original test scenario which requires the assistive technology software and usage of Java Access Bridge API and which can be tested using the manual test case attached to the issue in JBS. However the regression test still allows to reproduce the issue and verify that the fix resolves it.
>>
>> Thank you,
>> Anton
>
> Anton Litvinov has updated the pull request incrementally with one additional commit since the last revision:
>
> The second version of the fix for JDK-8277922
The second version of the fix for this bug is created and added to this Pull Request. Please review the new version of the fix.
In the second version of the fix the next changes were introduced:
In the file "src/java.desktop/share/classes/javax/swing/JTable.java":
1.1. "protected" access modifier in declaration of the new class "AccessibleBooleanRenderer" was removed to make this class package-private.
1.2. "public" access modifier in declaration of the new method "void AccessibleBooleanRenderer.setCellToDoActionOn(JTable table, int row, int column)" was removed to make this method package-private.
In the file "test/jdk/javax/accessibility/JTable/JCheckBoxInJTableCannotBeClickedTest.java":
2.1. Declaration of the method "public static void main(String[] args)" was changed to specify that it can throw "InterruptedException", "InvocationTargetException", "AWTException", and all unnecessary "catch" blocks were removed from this method.
2.2. Setting "MetalLookAndFeel" was removed from the method "private void createGUI()".
-------------
PR: https://git.openjdk.java.net/jdk/pull/7416
More information about the client-libs-dev
mailing list